verificar ver tls tiene sitio saber instalar error conexión como certificado openssl ssl-certificate

tls - verificar certificado ssl openssl



Problemas para entender la verificación de la cadena de certificados SSL (2)

Mi aplicación usa SSL para comunicarse de forma segura con un servidor y tiene problemas para verificar la cadena de certificados. La cadena se ve así:

Entrust.net Autoridad de Certificación de Servidor Seguro -> DigiCert Global CA -> * .ourdomain.com

Estamos utilizando una tienda de certificados extraída de Mozilla. Contiene el certificado de Entrust.net, pero no el de DigiCert Global CA.

Según tengo entendido, no es necesario confiar en una autoridad intermedia mientras exista la autoridad raíz, pero la verificación falla:

% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt error 20 at 0 depth lookup:unable to get local issuer certificate

Entonces, ¿debo confiar explícitamente en la CA DigiCert Global para que la verificación pase? Eso parece incorrecto ¡Pero tú dime!

EDITAR : ahora entiendo que el archivo de certificado debe estar disponible para OpenSSL por adelantado. Algo como esto funciona:

% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt ourdomain.com.crt: OK

Esto me permite proporcionar una copia de DigiCert CA sin decir explícitamente "Confío en ello", toda la cadena aún necesita ser verificada.

Pero seguramente los navegadores como Firefox no siempre enviarán una copia de cada certificado que necesite. Siempre habrá nuevas CA y el punto es usar la seguridad del certificado raíz para asegurarse de que todas las CA intermedias sean válidas. ¿Derecha? Entonces, ¿cómo funciona esto? ¿Es realmente tan tonto como parece?


Esta es la forma correcta de verificar un certificado proveniente de un servidor web

  • El cliente mantiene una lista de certificados de CA ROOT de confianza
  • Los servidores web deben devolver el siguiente certificado de servidor: obligatorio
  • Certificado (s) intermedio (s) - Certificado de CA ROOT requerido - No obligatorio / opcional

Cuando un cliente se conecta a un servidor, obtiene el certificado del servidor y los certificados intermedios del servidor. El cliente entonces construye una cadena de confianza desde el certificado del servidor, a través de los certificados intermedios a uno de los certificados de CA ROOT en los que confía. Los certificados ROOT siempre están autofirmados, por lo que es donde se detiene la cadena.

Aquí hay un comando simple para probar un certificado de servidor web usando openssl

openssl s_client -CAfile <root ca file> -quiet -showcerts -connect IP:PORT

En el caso del alojamiento virtual, donde se sirven varios certificados en la misma IP: PUERTO, la indicación del nombre del servidor (SNI) se puede habilitar utilizando -servername <FQDN> . De lo contrario, se enviará el certificado predeterminado.


Los certificados intermedios deben instalarse en sus servidores web, así como los certs para su propio dominio. Estaba teniendo el mismo problema la semana pasada ... Firefox parece ser más quisquilloso que el resto de los navegadores sobre esto.