¿Hay alguna forma de diferenciar los certificados que vinieron como parte de la cadena de certificados de los que ya están en el almacén de confianza?

1

OpenSSL muestra la siguiente cadena de certificados para example.com:443.

$ openssl s_client -connect example.com:443 < /dev/null | head -10
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
DONE
CONNECTED(00000003)
---
Certificate chain
 0 s:/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----

La cadena de certificados tiene el certificado del servidor emitido para www.example.org y un certificado intermedio que pertenece a la CA de DigiCert SHA2 High Assurance Server.

Sin embargo, la cadena de certificados no contiene el certificado raíz autofirmado de la CA raíz de EV de DigiCert High Assurance

.

Pero tanto Firefox como Chrome también muestran el certificado raíz como parte de la cadena de certificados. Esto se debe a que estos certificados raíz vienen incluidos con los navegadores.

¿Quiero saber si hay alguna manera en Firefox o Chrome para descubrir que solo dos de los tres certificados en la cadena de certificados mostrados pertenecen a la cadena de certificados proporcionada por el servidor en el protocolo de enlace TLS? ¿Quizás algún tipo de indicador visual o alguna otra cosa que diferencie los certificados que aparecieron en la cadena de certificados de los que forman parte del almacén de confianza del navegador?

    
pregunta Lone Learner 04.05.2017 - 16:42
fuente

1 respuesta

1

Puede obtener la lista completa de certificados enviados por el servidor conectándose al servidor y tomar la cadena con OpenSSL:

openssl s_client -connect www.google.com:443

Esto mostrará (entre otras cosas) toda la cadena que envió el servidor

Sin embargo, es inútil para evaluar la seguridad de tu conexión (aunque es útil para la depuración).

¿Por qué es inútil esa información? Bueno, hay dos posibles scenarii aquí:

  1. El ancla de confianza utilizada es segura. En este caso, no hay forma de que un atacante inyecte un certificado no válido en la cadena de confianza: si un certificado determinado está en la cadena, ha sido (directamente o indirectamente) firmado por la raíz y, por lo tanto, examinado por esa raíz. Ya que confía en esa raíz (ese es el punto completo aquí), puede confiar en ese certificado. Repita para cada certificado en la cadena y tiene plena confianza.
  2. El ancla de confianza está comprometida de CUALQUIER modo. Entonces no puede confiar en CUALQUIER certificado que haya emitido sin importar de dónde provenga. Estos certificados podrían haber sido reemplazados por otros exactamente idénticos con solo la parte de la clave pública modificada y usted no sería más sabio.

En ninguno de estos casos, saber de dónde provienen los certificados intermedios lo ayudará a decidir si se puede confiar en una conexión específica, por lo tanto, la información es inútil desde una perspectiva de seguridad.

Me gustaría agregar dos cosas aquí:

  • Esta explicación asume que no hay fallas ni en la criptografía ni en el software utilizado. Si esta suposición no es correcta, entonces todas las apuestas son canceladas (pero esto no es exactamente el contexto de la pregunta).
  • Hay un caso muy especial que funciona de una manera diferente: certificado pinning . En este caso, no confía en una cadena de confianza sino en un código de hardware (de alguna manera u otra) el certificado de hoja. En este caso, la cadena de confianza no tiene sentido porque no es así como se afirma la confianza de la conexión.
respondido por el Stephane 09.05.2017 - 11:45
fuente

Lea otras preguntas en las etiquetas