zaLinux.ru

Как верифицировать сертификат SSL


Для проверки действительности сертификата используется команда

openssl verify СЕРТИФИКАТ

В разделе «Как создать сертификаты SSL (TLS) для сайтов» мы создали сертификат mydomain.com.crt, попробуем проверить его:

openssl verify mydomain.com.crt

Вывод:

C = US, ST = CA, O = "MyOrg, Inc.", CN = mydomain.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error mydomain.com.crt: verification failed

Верификация провалилась — причина в том, что мы использовали для подписи сертификата приватный ключ от своего собственного CA, который создали чуть ранее.

С помощью опции -CAfile можно указать сертификат доверенного Центра Сертификации:

openssl verify -CAfile rootCA.crt mydomain.com.crt

Как можно увидеть, проверка подлинности прошла успешно:

mydomain.com.crt: OK

Чтобы было поинтереснее, возьмём реальные сертификаты сайта и промежуточного центра сертификации:

openssl s_client -showcerts -connect w-e-b.site:443 </dev/null

Вы увидите сертификаты (один или несколько), найдите по полю CN сначала сертификат домена w-e-b.site:

0 s:CN = w-e-b.site

И скопируйте содержимое начиная с -----BEGIN CERTIFICATE----- и заканчивая -----END CERTIFICATE-----. Затем сохраните это в файл w-e-b.site.crt.

Затем найдите сертификат центра сертификации и сохраните его в файл x3.crt:

Итак, для наших экспериментов у нас появилось два новых файла: w-e-b.site.crt (сертификат сайта) и x3.crt (сертификат промежуточного Центра Сертификации).

Попробуем проверить действительность сертификата сайта:

openssl verify w-e-b.site.crt

Поскольку сайт открывается нормально и веб браузер показывает, что с сертификатом сайта всё в порядке, то тот факт, что проверка подлинности не пройдена может показаться странным.

Проверим подлинность промежуточного сертификата организации, которая подписала сертификат сайта:

openssl verify x3.crt

Как можно увидеть на скриншоте, с этим сертификатом всё в порядке.


Дело в том, что команда openssl verify сверяет подпись в сертификате с коревыми Центрами Сертификации, чьи сертификаты установлены в операционной системе как доверенные. Мы можем убедиться в этом. Следующая команда покажет организацию, подписавшую сертификат x3.crt:

openssl x509 -in x3.crt -noout -issuer

Вывод:

issuer=O = Digital Signature Trust Co., CN = DST Root CA X3


Имя издателя в поле CN (Common Name) DST Root CA X3.

Убедимся, что сертификат этого CA действительно есть в системе:

awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep 'DST Root CA X3'

Если мы посмотрим, кто выдал сертификат сайта w-e-b.site:

openssl x509 -in w-e-b.site.crt -noout -issuer

То увидим, что это Let's Encrypt Authority X3.

Посмотрим имя организации в сертификате x3.crt:

openssl x509 -in x3.crt -noout -subject

Имя совпало — это также Let's Encrypt Authority X3.


То есть в целом цепочка понятна — сертификат w-e-b.site.crt выдан организацией Let's Encrypt Authority X3, а её полномочия по выдаче сертификатов заверяет DST Root CA X3, которая в операционной системе находится среди доверенных корневых Центрах Сертификации.

Чтобы автоматически выполнить проверку всей цепочки с помощью openssl verify, нам нужно указать промежуточный сертификат после опции -untrusted. Если промежуточных сертификатов несколько, то нужно указать их все — опцию -untrusted можно использовать несколько раз.

openssl verify -untrusted x3.crt w-e-b.site.crt

Опция -show_chain покажет информацию о цепочке сертификатов, которая была построена:

openssl verify -untrusted x3.crt -show_chain w-e-b.site.crt

Опции -verify_hostname ИМЯ-ХОСТА и -verify_ip IP позволяют проверить, действительно ли сертификат выдан для указанного хоста или IP адреса. Чтобы проверка прошла успешно, имя хоста должно быть в Subject Alternative Name или Common Name в subject сертификата. А IP адрес должен быть в Subject Alternative Name в subject сертификата. Пример:

openssl verify -untrusted x3.crt -verify_hostname w-e-b.site w-e-b.site.crt

Следующими тремя командами вы можете проверить, соответствует ли SSL сертификат приватному ключу:

Для SSL сертификата выполните команду вида:

openssl x509 -noout -modulus -in ФАЙЛ.crt | openssl md5

Для приватного ключа RSA выполните команду вида:

openssl rsa -noout -modulus -in ФАЙЛ.key | openssl md5

Для CSR:

openssl req -noout -modulus -in ФАЙЛ.csr | openssl md5

Замените ФАЙЛ на имя ваших файлов. Для всего перечисленного выше — SSL сертификата, приватного ключа и запроса на подпись — хеш должен быть одинаковым.

Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *