algorithm - validar - verificar certificado ssl openssl
¿Cómo se verifican los certificados SSL? (5)
¿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 lo usa para contactar al emisor, y de alguna manera lo compara certificados de validez.
- ¿Cómo se hace esto exactamente?
- ¿Qué pasa con el proceso 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 man-in-the-middle, para que todo se "vea" seguro?
Aquí hay una explicación muy simplificada:
Su navegador web descarga el certificado del servidor web, que contiene la clave pública del servidor web. Este certificado se firma con la clave privada de una autoridad certificadora confiable.
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.
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 a la que tiene una conexión abierta.
Su navegador web genera una clave simétrica compartida que se utilizará para encriptar 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, garantizando así 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 evitar los ataques de hombre en el medio. Sin embargo, incluso un certificado sin firmar evitará que alguien escuche pasivamente en su tráfico encriptado, ya que no tienen forma de obtener acceso a su clave simétrica compartida.
El cliente tiene una tienda predefinida de claves públicas de las autoridades certificadoras de SSL. Debe existir 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 lo hace para agregar un certificado a una autoridad local en la que usted confía, como la empresa para la que trabaja o la escuela a la que asiste o no.
La lista predefinida puede variar según el cliente que utilice. Los grandes proveedores de certificados SSL se aseguran de que sus certificadores de 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 una clave privada de este tipo tendría serias implicaciones para la seguridad del comercio electrónico en general. Por eso, esas claves privadas están muy, muy bien guardadas.
Tú 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 la validez.
El cliente no tiene que verificar con el emisor porque hay dos cosas:
- todos los navegadores tienen una lista preinstalada de las principales claves públicas de CA
- 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 su cuenta y sin ponerse en contacto con el servidor del emisor, que ese certificado es auténtico. Esa es la belleza de la encriptación asimétrica.
Tenga en cuenta que 2. no se puede hacer sin 1.
Esto se explica mejor en este gran diagrama que hice hace un tiempo
(salte a "¿Qué es una firma?" en la parte inferior)
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 que se compra es simple: el certificado 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 intrínsecamente menos seguros que los vendidos por CA comerciales como GoDaddy y Verisign, y que usted tiene que vivir con advertencias / excepciones del navegador si los usa; esto es incorrecto
Si distribuye de forma segura un certificado autofirmado (o certificado de CA, como se sugiere Bobince) e instalarlo en los navegadores que usarán su sitio , es tan seguro como uno que se compró y no es vulnerable a man-in-the-middle ataques y falsificación de certificados. Obviamente, esto significa que solo es factible si solo unas pocas personas necesitan un acceso seguro a su sitio (por ejemplo, aplicaciones internas, blogs personales, etc.).
Con el interés de aumentar la conciencia y alentar a los compañeros blogueros de poca monta como yo a protegerse, escribí un tutorial de nivel de entrada que explica con más detalle los conceptos detrás de los certificados y cómo crear y utilizar de forma segura un certificado autofirmado. (completo con muestras de código y capturas de pantalla). Aquí hay un enlace en caso de que sea útil para cualquier otra persona en el futuro: http://www.clintharris.net/2009/self-signed-certificates/ .
si tiene una mente más técnica, este sitio es probablemente lo que desea: http://www.zytrax.com/tech/survival/ssl.html
advertencia: el agujero del conejo se profundiza :).