Estoy enseñando una clase sobre cadenas de certificados, así que descargo la cadena de www.google.com
que tiene 4 certificados. Quiero demostrar cómo funcionan las dependencias desde el emisor al sujeto, demostrando que cada entidad firma el certificado del que está debajo.
Llame a los certificados g3
, g2
, g1
y g0
donde g3
es una raíz autofirmada, g2
y g1
son CA intermedios y g0
es un certificado de hoja . Intento esto:
$ openssl verify g0
error 20 at 0 depth lookup:unable to get local issuer certificate
Esto tiene sentido: la verificación falla porque se trata de un certificado de hoja sin CA dada. Así que a continuación intento esto:
$ openssl verify -CAfile g1 g0
g0: OK
¡Genial! Con el intermedio, ahora funciona! Continuando por la cadena:
$ openssl verify -CAfile g2 g1
g1: OK
¡Impresionante! Parece que g1
está firmado correctamente por g2
. Pero esto no es realmente lo que está siendo verificado. Porque g1
también está aparentemente firmado por g3
:
$ openssl verify -CAfile g3 g1
g1: OK
Y, de hecho, g1
ni siquiera necesita una CA:
$ openssl verify g1
OK
¡Parece que cualquier certificado con CA establecido en Verdadero en restricciones básicas siempre pasará la verificación!
Pregunta: ¿Cómo verifico que g2
realmente firmó g1
usando OpenSSL desde el CLI? ¿Y es este otro error de OpenSSL? ¿O simplemente un comportamiento contraintuitivo?