Aclaración específica sobre cómo se confía en la clave pública del servidor https

1

Sé el concepto general de cómo funcionan los certificados digitales: por ejemplo, el servidor "firma" el mensaje que desea enviar al cliente usando su clave privada y envía junto con un resumen del mensaje y en el lado receptor, el cliente CONOCE la clave pública del servidor y puede verificar que el mensaje es realmente auténtico (proviene del servidor y no se modificó en tránsito) utilizando una función de descifrado y revisando el contenido del mensaje, haga un resumen también y confirme que el mensaje real recibido es auténtico.

La pregunta es ¿cómo puede el cliente decir que la clave pública del servidor enviada de forma clara (supongo que se envió en la respuesta de saludo del servidor) es auténtica? Puedo entender que las CA grandes tienen sus certificados ya instalados en la máquina cliente, pero si el servidor envía un certificado firmado, por ejemplo, por Digicert, ¿cómo puedo decirle al cliente que ese es el caso (tal vez un apretón de manos ssl interceptado por MIM que cambia las cosas)?

Paraaclararlascosas,agreguélaimagenquedescribeelprocesomedianteelcualelclienteverificaquelafirmadelcertificadoseareal."Cuando el navegador recibe el certificado, verifica la autoridad de firma. Si es una autoridad de firma pública y respetada, el navegador ya sabrá su clave pública (los navegadores se entregan con certificados de muchas autoridades de firma preinstalados), por lo que puede verificar la firma "Pregunta: La clave pública de la autoridad de firma debe comunicarse de alguna manera al cliente (incluso si esa CA se almacena localmente, ¿cómo sabe qué servidor de origen utiliza?). ¿Cómo se realiza ese proceso?

    
pregunta Ghita 01.10.2015 - 13:50
fuente

2 respuestas

1

Voy a ampliar mi comentario en una respuesta real. Creo que la confusión aquí está vinculada a un malentendido de cómo funcionan las firmas digitales.

Aquí hay un proceso simple para crear un certificado autofirmado:

  1. Genera un par de claves públicas / privadas.
  2. Crea un archivo con mi clave pública y mi nombre que se parece a:

    {public_key, my_name}

  3. Calcular un hash criptográfico de ese archivo (sha1 por ejemplo) y cifrarlo con mi clave privada:

    hash = sha1({public_key, my_name}) encrypted_hash = encrypt(hash, private_key)

  4. Agregue el hash cifrado al final del archivo.

En este punto, el certificado debería tener un aspecto similar al siguiente:

{public_key, my_name, encrypted_hash}

Para verificar este certificado, un cliente sigue estos pasos:

  1. Compute el hash sha1 del certificado:

    test_hash = sha1({public_key, my_name})

  2. Compare este hash con el hash descifrado usando public_key como clave:

    decrypted_hash = decrypt(encrypted_hash, public_key)

  3. Si decrypted_hash = test_hash, el certificado es un certificado válido autofirmado.

El panorama general de este artículo de Wikipedia realmente me aclaró las cosas cuando estuve tratando de envolver mi cabeza alrededor de estas cosas:

Wikipedia: Certificado de clave pública

    
respondido por el jpheldson 01.10.2015 - 21:28
fuente
3
  

Puedo entender que las CA grandes tienen sus certificados ya instalados en la máquina cliente

Eso es todo. Es sólo precargado en los clientes. No hay magia.

Debe obtener sus anclajes de confianza (certificados de CA raíz) en los clientes ANTES de que pueda iniciar HTTPS confiable. No hay forma de evitar eso.

    
respondido por el StackzOfZtuff 01.10.2015 - 14:11
fuente

Lea otras preguntas en las etiquetas