¿Cómo se verifican los certificados SSL?

218

¿Cuál es la serie de pasos necesarios para verificar de forma segura un certificado SSL? Mi (muy limitado) entendimiento es que cuando visita un sitio https, el servidor envía un certificado al cliente (el navegador) y el navegador obtiene la información del emisor del certificado de ese certificado, luego la usa para contactar al emisor, y de alguna manera compara certificados de validez.

  • ¿Cómo se hace esto exactamente?
  • ¿Qué pasa con el proceso que lo hace inmune a los ataques de hombre en el medio?
  • ¿Qué impide que una persona aleatoria configure su propio servicio de verificación para usar en ataques de hombre en el medio, para que todo "parezca" seguro?
rcreswick
fuente
este video le resultó muy útil para comprender el flujo youtube.com/watch?v=T4Df5_cojAs
Krishna

Respuestas:

308

Aquí hay una explicación muy simplificada:

  1. Su navegador web descarga el certificado del servidor web, que contiene la clave pública del servidor web. Este certificado está firmado con la clave privada de una autoridad de certificación de confianza.

  2. Su navegador web viene instalado con las claves públicas de todas las principales autoridades de certificación. Utiliza esta clave pública para verificar que el certificado del servidor web haya sido firmado por la autoridad de certificación de confianza.

  3. El certificado contiene el nombre de dominio y / o la dirección IP del servidor web. Su navegador web confirma con la autoridad de certificación que la dirección que figura en el certificado es aquella con la que tiene una conexión abierta.

  4. Su navegador web genera una clave simétrica compartida que se utilizará para cifrar el tráfico HTTP en esta conexión; Esto es mucho más eficiente que usar el cifrado de clave pública / privada para todo. Su navegador encripta la clave simétrica con la clave pública del servidor web y luego la envía de vuelta, asegurando que solo el servidor web pueda descifrarla, ya que solo el servidor web tiene su clave privada.

Tenga en cuenta que la autoridad de certificación (CA) es esencial para prevenir ataques de hombre en el medio. Sin embargo, incluso un certificado sin firmar evitará que alguien escuche pasivamente su tráfico encriptado, ya que no tienen forma de obtener acceso a su clave simétrica compartida.

Eli Courtwright
fuente
44
Alrededor del paso 1.5, el servidor también "firma" algo con la clave privada asociada con su certificado. Esto se combina con el control de nombre / IP para garantizar que solo el sitio propietario del certificado lo presente.
Darron
68
Para ver un ejemplo completo y trabajado de este proceso usando Firefox conectándose a amazon.com , consulte moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser
99
No sabía que mi navegador viene instalado con las claves públicas de todas las principales autoridades de certificación. Ahora sé cómo se verifican mis certificados SSL sin riesgo de MITM :). ¡Gracias!
OneChillDude
55
el servidor necesita solicitar un certificado de CAuthority, por lo que le envía una solicitud. ¿Cómo podría CA estar seguro de que el servidor es válido?
voipp
44
@voipp: ¡Gran pregunta! Históricamente, ha habido algunos enfoques, como "enviar un correo electrónico desde webmaster@<domain-being-verified>o" Colocar este archivo en su dominio para demostrar que lo posee ". Sin embargo, ha habido problemas con las personas que obtienen CA para emitir certificados para dominios que no propio - ¡famoso alguien logró obtener una CA sombría para emitir un certificado para gmail.com!
Eli Courtwright
58

Vale la pena señalar que, además de comprar un certificado (como se mencionó anteriormente), también puede crear el suyo de forma gratuita; esto se conoce como un "certificado autofirmado". La diferencia entre un certificado autofirmado y uno comprado es simple: el adquirido ha sido firmado por una Autoridad de Certificación que su navegador ya conoce. En otras palabras, su navegador puede validar fácilmente la autenticidad de un certificado comprado.

Desafortunadamente, esto ha llevado a una idea errónea común de que los certificados autofirmados son inherentemente menos seguros que los vendidos por CA comerciales como GoDaddy y Verisign, y que debe vivir con advertencias / excepciones del navegador si los usa; Esto es incorrecto .

Si distribuye de forma segura un certificado autofirmado (o un certificado de CA, como sugirió Bobince) y lo instala en los navegadores que usarán su sitio , es tan seguro como uno que haya comprado y no es vulnerable a los intermediarios. ataques y falsificación de certificados. Obviamente, esto significa que solo es factible si solo unas pocas personas necesitan acceso seguro a su sitio (por ejemplo, aplicaciones internas, blogs personales, etc.).

Clint Harris
fuente
1
De hecho, distribuir de forma segura su propio certificado es una forma de desollar al gato, pero una forma mucho más fácil es acudir a cualquiera de las llamadas CA "abiertas". CACert.org es mi favorito. Siempre y cuando confíe en los pasos que toman para salvaguardar la emisión de su certificado, importar su certificado raíz es seguro.
nsayer
66
Me encanta este comentario, desafortunadamente destaca una debilidad muy importante con las AC. Supongamos que importa un certificado de CA de Bob Smith; bueno, Bob Smith puede firmar un certificado para cualquier dominio (incluidos google.com y chase.com). En realidad, esta es la razón por la cual GoDaddy / Verisign paga mucho dinero para ser incluido en el sistema operativo: son revisados ​​por un equipo de seguridad para garantizar que tengan cheques para asegurarse de que no firmen un certificado para una persona maliciosa. Creo que debería poder decir "esta CA solo puede firmar certificados para mysite.com".
Natalie Adams
¿No es más seguro el certificado autofirmado, ya que a las AC que se les podría pagar para firmar algo que no deberían tener? Si puede distribuir de manera segura los certificados de CA a los puntos finales, vaya siempre con certificados autofirmados.
javaPhobic
¿Hay alguna CA que sea gratuita y verificada en la mayoría de los principales navegadores? Estoy buscando un certificado básico simplemente para verificar que tengo un correo electrónico y un nombre de dominio. Sin embargo, los que he encontrado no están en la mayoría de los principales navegadores.
Alex Kwitny
@NathanAdams En teoría, se supone que las grandes AC deben examinar las solicitudes para evitar emitir certificados falsos como usted describe ... pero lea esta historia: stripe.ian.sh
nsayer
38

Tu dijiste eso

el navegador obtiene la información del emisor del certificado de ese certificado, luego la usa para contactar al emisor y de alguna manera compara los certificados para su validez.

El cliente no tiene que consultar con el emisor porque hay dos cosas:

  1. Todos los navegadores tienen una lista preinstalada de todas las claves públicas principales de CA
  2. el certificado está firmado, y esa firma en sí misma es prueba suficiente de que el certificado es válido porque el cliente puede asegurarse, por sí mismo y sin contactar al servidor del emisor, que ese certificado es auténtico. Esa es la belleza del cifrado asimétrico.

Tenga en cuenta que 2. no se puede hacer sin 1.

Esto se explica mejor en este gran diagrama que hice hace algún tiempo.

(pase a "¿qué es una firma?" en la parte inferior)

gota

ychaouche
fuente
99
Esta debería haber sido la respuesta aceptada. La respuesta de @Eli Courtwright es una manera breve de entender cómo funcionan los certificados.
Felix Crazzolara
Leer esto una vez podría no ser suficiente, pero si ya está familiarizado con los fragmentos de SSL, esto realmente reúne todo. ¡Buen trabajo!
Cameron Gagnon el
Fantástica imagen. Finalmente algo que explica mis preguntas. En todos los lugares a los que voy profundizo solo digo "el navegador verifica que el certificado es correcto". ¿PERO CÓMO HACE ESO? Esto da una respuesta.
ori6151
8

El cliente tiene un almacén previamente sembrado de claves públicas de las autoridades de certificación SSL. Debe haber una cadena de confianza desde el certificado para el servidor hasta las autoridades intermedias hasta uno de los llamados certificados "raíz" para que el servidor sea confiable.

Puede examinar y / o modificar la lista de autoridades de confianza. A menudo, hace esto para agregar un certificado para una autoridad local en la que sabe que confía, como la empresa para la que trabaja o la escuela a la que asiste o no.

La lista pre-sembrada puede variar según el cliente que use. Los grandes proveedores de certificados SSL aseguran que sus certificados raíz estén en todos los principales navegadores ($$$).

Los ataques de mono en el medio son "imposibles" a menos que el atacante tenga la clave privada de un certificado raíz de confianza. Dado que los certificados correspondientes se implementan ampliamente, la exposición de dicha clave privada tendría serias implicaciones para la seguridad del comercio electrónico en general. Por eso, esas claves privadas están muy, muy protegidas.

nsayer
fuente