Da un sito Web, puoi fare:
openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null
Ciò mostrerà la catena di certificati e tutti i certificati presentati dal server.
Ora, se salvo quei due certificati in file, posso usare 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
L' -untrusted
opzione viene utilizzata per fornire i certificati intermedi; se.crt
è il certificato da verificare. Il risultato di profondità = 2 proviene dall'archivio della CA attendibile del sistema.
Se non si dispone dei certificati intermedi, non è possibile eseguire la verifica. Ecco come funziona X.509.
A seconda del certificato, può contenere un URI da cui ottenere l'intermedio. Ad esempio, 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
L'URI di "CA Issuers" punta al certificato intermedio (in formato DER, quindi è necessario utilizzarlo openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem
per convertirlo per un ulteriore utilizzo da parte di OpenSSL).
Se esegui openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash
, ottieni 244b5494
, che puoi cercare nell'archivio della CA principale di sistema in /etc/ssl/certs/244b5494.0
(basta aggiungere .0
al nome).
Non penso che ci sia un comando OpenSSL semplice e piacevole per fare tutto questo per te.