¿Cómo funcionan los certificados SSL / TLS?

-1

Estoy tratando de entender cómo funcionan los certificados SSL / TLS, pero me falta algo. Obtuve mi conocimiento actual de este sitio web: enlace .

También he visto esta publicación: ¿Cómo funcionan los procesos para certificados digitales, firmas y ssl?

Después de revisar ambos enlaces por enésima vez, el verdadero misterio para mí es cómo el cliente verifica el certificado del servidor.

Esta es mi comprensión de los pasos:

1. Certificate Authority (CA) gives an encrypted root certificate to a server.
2.a. Server gives client a locally encrypted certificate and a public key.
2.b. Server gives client a root certificate which is decrypted with the public key already on the client's computer.
3. Client uses public keys to decrypt certificates.
4. Certificates contains information that satisfies client of servers authenticity.

Probablemente me esté perdiendo algo de información crítica en cada paso, y probablemente también falte pasos aquí. Supongamos que soy el cliente. Aquí están mis preguntas:

Q0. ¿Cómo sé (el cliente) que debo usar la clave pública dada para descifrar el certificado? En otras palabras, si un impostor puede obtener un certificado descifrado (¿cuál de los dos no puede obtener el certificado?); ¿Puede el impostor cifrar el certificado con su propia clave privada y darme una nueva clave pública?

En este caso, creo que debería poder descifrar el certificado. La comprobación de texto claro simplemente puede no funcionar. Pero, ¿puede el impostor editar el texto sin cifrar para hacer feliz a mi navegador?

Q1. ¿Qué sucede si un impostor simplemente me reenvía el certificado cifrado? Yo lo descifraría con una clave pública real. Probablemente hay algo en mi paso 4 que me estoy perdiendo.

En este caso, de nuevo, el certificado de texto claro debe tener alguna información que revele que es mala. ¿Qué es esta información?

P2. ¿Hay información de texto claro en el certificado descifrado que valida que yo (el cliente) estoy conectado al servidor al que quiero conectarme? Estoy seguro de que el certificado debería decir algo como "from stackoverflow.com". Dado que esto se realiza mediante una computadora, ¿asumo que hay muchas comparaciones hechas?

Q2.a ¿Cómo sé (el cliente) que tengo el certificado correcto? Por ejemplo, si stackoverflow.com me envió un certificado para Amazon.com, ¿cómo detectaría el navegador un problema si (por razones maliciosas) el certificado fuera descifrado?

    
pregunta Java Addict 29.07.2014 - 21:54
fuente

1 respuesta

3

Primer paso: olvídate de todo acerca del cifrado . No hay cifrado en los certificados. Hay firmas digitales . Los algoritmos de firma digital, cuando se inventaron y publicaron por primera vez (a fines de la década de 1970), se describieron desafortunadamente como "cifrado con la clave privada", que es una analogía defectuosa, que en realidad no funciona y conlleva una gran dosis de confusión. Solo di no. Habla de firma .

Una firma es un dato que es:

  • calculado sobre una secuencia dada de bytes;
  • requiere una clave privada ;
  • se puede verificar utilizando la clave pública correspondiente.

Los certificados están firmados por Autoridades de certificación . Con esa firma, la CA dice: "Yo, la CA, garantizo que el contenido de ese certificado es correcto". ¿Qué contiene un certificado? Principalmente una identidad y una clave pública . Lo que la CA afirma es que la clave pública (en el certificado) es realmente propiedad de la entidad cuya identidad está en el certificado.

La idea es que, cuando usted (el cliente) se conecta a un servidor SSL, el servidor le devuelve su certificado. Luego, puede verificar la firma en ese certificado, ganando cierta confianza en el enlace de identidad / clave pública que el certificado incorpora. También verifica que el nombre en el certificado sea lo que espera (el nombre del servidor con el que está tratando de hablar). Una vez que se han realizado estas dos verificaciones, tiene cierta seguridad razonable de que la clave pública en el certificado es realmente la clave pública del servidor original. El resto de SSL utiliza esa clave pública para todo el criptográfico SSL.

Este proceso funciona solo si ya conoce la clave pública de CA. Usted podría aprenderlo con otro certificado (que contiene la clave pública de CA y está firmado por algunos über-CA); esto es común (ese es el concepto de CA intermedia ) pero solo mueve el problema. Debe conocer, a priori , alguna clave pública de CA en algún momento. Bill Gates, en Su infinita sabiduría, consideraba adecuado incluir una clave pública de aproximadamente "CA raíz" en Windows / Internet Explorer, para que su confianza pueda comenzar en alguna parte.

Eso es lo esencial: un certificado representa un enlace entre una identidad y una clave pública, y está firmado por alguna AC; usted verifica el enlace al verificar la firma, lo que requiere el uso de la clave pública de CA; o conoce la clave pública de CA mediante un Acta de Bill Gates, o mediante otro certificado, y así sucesivamente. Todo esto lo hacen los clientes SSL.

El resto es solo técnico (y complejo). Puede comenzar con la página de Wikipedia , que es tan bueno (y tan malo) un punto de partida como cualquier otra cosa en ese tema.

    
respondido por el Thomas Pornin 29.07.2014 - 22:35
fuente

Lea otras preguntas en las etiquetas