С веб-сайта вы можете сделать следующее:
openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null
Это покажет цепочку сертификатов и все сертификаты, представленные сервером.
Теперь, если я сохраню эти два сертификата в файлы, я могу использовать 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
Опция -untrusted
используется для предоставления промежуточных сертификатов; se.crt
— сертификат для проверки. Результат depth=2 был получен из доверенного системного хранилища ЦС.
Если у вас нет промежуточных сертификатов, вы не сможете выполнить проверку. Именно так работает X.509.
В зависимости от сертификата он может содержать URI для получения промежуточного звена. Например, openssl x509 -in se.crt -noout -text
содержит:
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt
Этот URI "CA Issuers" указывает на промежуточный сертификат (в формате DER, поэтому вам нужно использовать openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pem
, чтобы преобразовать его для дальнейшего использования OpenSSL).
Если вы запустите openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hash
, вы получите 244b5494
, который вы можете найти в системном корневом хранилище ЦС по адресу . ]/etc/ssl/certs/244b5494.0
(просто добавьте .0
к имени).
Я не думаю, что существует хорошая и простая команда OpenSSL, которая сделает все это за вас.