À partir d'un site Web, vous pouvez faire:
openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null
Cela montrera la chaîne de certificats et tous les certificats présentés par le serveur.
Maintenant, si j'enregistre ces deux certificats dans des fichiers, je peux utiliser 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' -untrustedoption est utilisée pour donner le ou les certificats intermédiaires; se.crtest le certificat à vérifier. Le résultat depth = 2 provenait du magasin CA de confiance du système.
Si vous ne disposez pas du ou des certificats intermédiaires, vous ne pouvez pas effectuer la vérification. Voilà comment fonctionne X.509.
Selon le certificat, il peut contenir un URI pour obtenir l'intermédiaire. À titre d'exemple, openssl x509 -in se.crt -noout -textcontient:
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt
Cet URI «CA Issuers» pointe vers le certificat intermédiaire (au format DER, vous devez donc utiliser openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem pour le convertir pour une utilisation ultérieure par OpenSSL).
Si vous exécutez, openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hashvous obtenez 244b5494, que vous pouvez rechercher dans le magasin racine de l'autorité de certification système /etc/ssl/certs/244b5494.0(ajoutez simplement .0le nom).
Je ne pense pas qu'il existe une commande OpenSSL simple et agréable pour faire tout cela pour vous.