Desde un sitio web, puede hacer:
openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null
Eso mostrará la cadena de certificados y todos los certificados que presentó el servidor.
Ahora, si guardo esos dos certificados en archivos, puedo usar openssl verify
:
$ openssl verify -show_chain -untrusted dc-sha2.crt se.crt
se.crt: OK
Chain:
depth=0: C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com (untrusted)
depth=1: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA (untrusted)
depth=2: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
La -untrusted
opción se usa para dar los certificados intermedios; se.crt
es el certificado a verificar. El resultado de la profundidad = 2 provino del almacén de CA de confianza del sistema.
Si no tiene los certificados intermedios, no puede realizar la verificación. Así es como funciona X.509.
Dependiendo del certificado, puede contener un URI para obtener el intermedio. Como ejemplo, openssl x509 -in se.crt -noout -text
contiene:
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt
Ese URI de "Emisores de CA" apunta al certificado intermedio (en formato DER, por lo que debe usarlo openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem
para convertirlo para que OpenSSL lo use).
Si ejecuta openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash
, obtiene 244b5494
, que puede buscar en la tienda de CA raíz del sistema en /etc/ssl/certs/244b5494.0
(solo agregue .0
el nombre).
No creo que haya un comando OpenSSL agradable y fácil para hacer todo eso por usted.