¿Cómo puedo saber si un certificado es autofirmado o autorizado por CA? En algún lugar leí que el asunto y emisor autofirmados serán los mismos, ¿es correcto?
¿Cómo puedo saber si un certificado es autofirmado o autorizado por CA? En algún lugar leí que el asunto y emisor autofirmados serán los mismos, ¿es correcto?
El certificado autofirmado tendrá campos de asunto y emisor idénticos, pero a) esto no está garantizado, yb) lo inverso no es cierto. Solo porque los campos tienen el mismo valor que no significa que el certificado sea autofirmado.
Aquí están los resultados de uno de nuestros certificados internos de raíz (root-ca.crt) e intermedios (ca.crt):
$ openssl x509 -subject -issuer -noout -in root-ca.crt
subject= /C=DE/ST=Berlin/L=Berlin/O=classmarkets GmbH/CN=classmarkets CA
issuer= /C=DE/ST=Berlin/L=Berlin/O=classmarkets GmbH/CN=classmarkets CA
$ openssl x509 -subject -issuer -noout -in ca.crt
subject= /CN=classmarkets CA/C=DE/L=Berlin/O=classmarkets GmbH/ST=Berlin
issuer= /C=DE/ST=Berlin/L=Berlin/O=classmarkets GmbH/CN=classmarkets CA
Puede ver que los campos son los mismos para ambos certificados, aunque ca.crt ha sido firmado por root-ca.crt:
$ openssl x509 -noout -text -in ca.crt | grep -A1 'Key Identifier'
X509v3 Authority Key Identifier:
keyid:A2:2D:AF:A0:D2:64:DF:30:F1:72:39:AC:21:AF:45:D6:D4:12:19:94
--
X509v3 Subject Key Identifier:
30:B0:6B:B5:56:9A:95:7C:31:4B:B2:65:95:0D:F9:EE:E8:3D:3A:C9
$ openssl x509 -noout -text -in root-ca.crt | grep -A1 'Key Identifier'
X509v3 Subject Key Identifier:
A2:2D:AF:A0:D2:64:DF:30:F1:72:39:AC:21:AF:45:D6:D4:12:19:94
Observe la ausencia del 'Identificador de clave de autoridad' en root-ca.crt.
RFC3280 establece en la sección 4.2.1.1 (enfatiza la mía):
El campo keyIdentifier de la extensión authorityKeyIdentifier DEBE incluirse en todos los certificados generados por las CA correspondientes Facilitar la construcción del camino de certificación. Hay una excepción; donde una CA distribuye su clave pública en forma de "autofirmado" certificado, el identificador de la clave de autoridad PUEDE omitirse . los firma en un certificado autofirmado se genera con el privado Clave asociada a la clave pública del sujeto del certificado. (Esta prueba que el emisor posee tanto las claves públicas como las privadas.) En este caso, los identificadores de clave de autoridad y sujeto serían idéntico , pero solo se necesita el identificador de clave de asunto para construcción de rutas de certificación.
Por lo tanto, me parece que los identificadores clave de Autoridad y Asunto son un indicador mucho mejor para los certificados autofirmados que los campos Emisor y Asunto. Para un certificado autofirmado, el Identificador de clave de autoridad estará ausente o tendrá el mismo valor que el Identificador de clave del sujeto.
La respuesta de @Vilican es técnicamente correcta y debería hacer el trabajo la mayor parte del tiempo. Pero quería saber si un certificado que estaba examinando (no algún sitio web en particular) se usó como un certificado autofirmado o si era un certificado CA.
Lo que descubrí es que los certificados de CA raíz válidos tienen el mismo emisor y sujeto. También Extensions
- > Certificate Basic Constraints
indica que esta es una CA, así como el número de CA intermedias permitidas para ser firmadas por esta.
Mientras que los certificados autofirmados utilizados para asegurar un sitio web generalmente no están marcados como CA, también tienen un nombre DNS como CN
en Subject
. Y / o tener una lista de nombres de DNS / direcciones IP permitidos en Extensions
- > Certificate subject alt name
.
Supongo que no es correcto verificar solo la concordancia entre el sujeto y el emisor de un certificado. Hay muchas opciones donde diferentes certificados con diferentes fechas de inicio / finalización u otros metadatos tienen el mismo asunto y el mismo emisor. Estoy usando el siguiente método para verificar que el certificado es autofirmado:
openssl verify -CAfile /cert/to/check.pem -CApath /cert/to/check.pem /cert/to/check.pem
Luego, si esta comprobación falla, es posible verificar si el certificado está firmado con otro certificado:
openssl verify -CAfile /cert/of/issuer.pem -CApath /cert/of/issuer.pem /cert/to/check.pem
La especificación del mismo certificado que CAfile
y CApath
evita la verificación exitosa contra los certificados de confianza predeterminados de OpenSSL.
Lea otras preguntas en las etiquetas tls certificates certificate-authority