Ejemplo de cadena de certificados

Aliaksandr Prysmakou
Aliaksandr Prysmakou

Sigue

8 de diciembre, 2017 – 3 min read

Veo muchas preguntas como «cómo obtener la cadena de certificados» o «cuál es el orden correcto de la cadena de certificados». Vamos a arrojar un poco de luz sobre ella.

TL;DR La cadena de certificados comienza con su certificat seguido por un intermedio o por el certificado de CA raíz. El emisor de cualquier certificado en la cadena debe ser igual al sujeto del siguiente hasta el certificado de la CA raíz, donde el sujeto es igual al emisor.

En primer lugar, para que un certificado SSL sea de confianza debe ser emitido por una CA que esté en el almacén de confianza del dispositivo que utiliza (almacén del sistema operativo o almacén de la aplicación como con Firefox).

Vamos a ver uno de los certificados:

un certificado

Para mi dominio (ver flechas) los sistemas intentan encontrar el emisor de mi certificado en el Store y si no se encuentra (en mi ejemplo no se encuentra) intentará encontrar el emisor del emisor de mi certificado y así sucesivamente.

La relación entre certificados crea una Cadena de Certificados en la que el certificado de un recurso debe ser emitido por la CA raíz (una de las instaladas en su sistema) o por una CA intermedia (emitida por una de las CA raíz o por una CA intermedia «superior»).

Muy a menudo obtenemos archivos de certificados (por ejemplo, un montón de .crt) sin un archivo específico de «cadena de certificados».

Para (re)crear la cadena debe comenzar desde su archivo de certificado, en mi caso es STAR_mi_dominio.crt

openssl x509 -text -noout -in STAR_my_domain.crt

Nos interesan dos campos de la salida: Asunto y Emisor.

El primero en el archivo de la cadena debe ser el certificado de tu dominio (hay excepciones. Por ejemplo, para AWS Certificate Manager debes enviar tu certificado y la cadena sin tu certificado por separado)

Hay dos tipos de CA: raíz e intermedia. Cualquier certificado de CA intermedia tiene diferentes campos de Emisor y Asunto. El certificado de la CA raíz tiene igual Emisor y Asunto.

El segundo debe ser el certificado del emisor de su certificado y así sucesivamente hasta el raíz.

En mi caso la cadena queda así:

Primero va mi certificado (STAR_mydomain.crt)

Issuer: C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority 5
Subject: my subject

Segundo en la cadena (TrustedSecureCertificateAuthority5.crt). Nota: Subject es igual al Issuer del archivo anterior :

Issuer: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority
Subject: C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority 5

El tercero es USERTrustRSAAddTrustCA.crt:

Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
Subject: C=US, ST=New Jersey, L=Jersey City, O=The USERTRUST Network, CN=USERTrust RSA Certification Authority

El último es AddTrustExternalCARoot.crt. Nota: Emisor = Sujeto, significa que es la CA raíz. No es necesario añadir el certificado de la CA raíz a la cadena. No lo frena pero aumenta la cantidad de handshakes y la cantidad de datos transmitidos.

Issuer: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root
Subject: C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root

Para crear un archivo con la cadena de certificados se puede ejecutar:

$cat STAR_mydomain.crt TrustedSecureCertificateAuthority5.crt USERTrustRSAAddTrustCA.crt > Certificate_Chain.crt

Para servicios como el gestor de certificados de AWS:

cat TrustedSecureCertificateAuthority5.crt USERTrustRSAAddTrustCA.crt > Certificate_Chain.crt

El archivo debe tener el siguiente aspecto:

-----BEGIN CERTIFICATE-----
content of your domain certificate
-----END CERTIFICATE-----
...
-----BEGIN CERTIFICATE-----
content of any intermediate CA certificate
-----END CERTIFICATE-----

Para comprobar si todo está bien con su cadena de certificados se puede utilizar cualquiera de los servicios en línea como por ejemplo DigiCert proporciona.

Actualización: Información actualizada después de múltiples problemas con la caducidad de AddTrust External CA Root el 30 de mayo de 2020. No es necesario añadir el certificado raíz. No se recomienda a menos que utilice uno autofirmado.