À 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' -untrusted
option est utilisée pour donner le ou les certificats intermédiaires; se.crt
est 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 -text
contient:
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_hash
vous obtenez 244b5494
, que vous pouvez rechercher dans le magasin racine de l'autorité de certification système /etc/ssl/certs/244b5494.0
(ajoutez simplement .0
le nom).
Je ne pense pas qu'il existe une commande OpenSSL simple et agréable pour faire tout cela pour vous.