Найти тему

Как проверить цепочку самоподписанных сертификатов | Linux

Оглавление

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

Чтобы каждый мог повторить все действия, описанные в статье, будем проверять сертификат Сбербанка, выданный Минцифры.

Проверка удалённого сертификата

openssl

Для начала проверим сертификат, который мы получаем при подключении к https://www.sberbank.ru

openssl s_client -connect www.sberbank.ru:443 | grep Verification
Ошибка верификации: самоподписанный сертификат
Ошибка верификации: самоподписанный сертификат

Этот сертификат выпущен Минцифры и по умолчанию ему не доверяет большинство ПО, что практически приравнивает его к самоподписанному.

Чтобы начать доверять такому сертификату, достаточно добавить в доверенные корневой сертификат Минцифры:

wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
openssl s_client -verify_quiet -CAfile russian_trusted_root_ca_pem.crt -connect www.sberbank.ru:443 | grep Verification

Верификация пройдена
Верификация пройдена

curl

Аналогично можно выполнить проверку с помощью утилиты curl:

curl -v https://www.sberbank.ru/ru/person/dist_services/inner_sbol --cacert russian_trusted_root_ca_pem.crt

Проверка сертификатов из локального хранилища

Для начала сохраним сертификат Сбера локально:

openssl s_client -showcerts -connect www.sberbank.ru:443 < /dev/null 2> /dev/null | openssl x509 -outform PEM > www.sberbank.ru.pem

Проверим его:

openssl verify www.sberbank.ru.pem
Верифицировать сертификат не удалось
Верифицировать сертификат не удалось

Аналогично попробуем указать корневой сертификат:

openssl verify -CAfile russian_trusted_root_ca_pem.crt www.sberbank.ru.pem
Снова неудача
Снова неудача

Это означает, что в цепочке не хватает промежуточных сертификатов. Попробуем их найти. Для этого найдём кто выдал сертификат Сберу:

openssl x509 -in www.sberbank.ru.pem -text -noout | grep -i issuer
Издатель с ссылками на сертификаты
Издатель с ссылками на сертификаты

Скачаем сертификат издателя по любой из ссылок и проверим его издателя:

wget http://rostelecom.ru/cdp/subca_ssl_rsa2022.crt
openssl x509 -in subca_ssl_rsa2022.crt -text -noout | grep -i issuer
Издатель тот же, но уже со ссылками на корневые сертификаты
Издатель тот же, но уже со ссылками на корневые сертификаты

Повторим процедуру:

wget http://rostelecom.ru/cdp/rootca_ssl_rsa2022.crt
openssl x509 -in rootca_ssl_rsa2022.crt -text -noout | grep -i issuer
Издатель Минцифры. Без ссылок на сертификаты.
Издатель Минцифры. Без ссылок на сертификаты.

Заметьте, что мы скачали сертификаты rootca и subca. Первый является корневым сертификатом, второй - выпускающим.

По аналогии нам потребуется скачать корневой и выпускающий сертификаты Минцифры:

wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt
wget https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt

После загрузки можем проверить всю цепочку сертификатов:

openssl verify -CAfile russian_trusted_root_ca_pem.crt -untrusted russian_trusted_sub_ca_pem.crt rootca_ssl_rsa2022.crt subca_ssl_rsa2022.crt www.sberbank.ru.pem
Проверка сертификатов пройдена
Проверка сертификатов пройдена

На самом деле, чтобы проверить сертификат Сбера, не обязательно было скачивать всю эту цепочку. Я показал это лишь для того, чтобы вы знали откуда иногда можно взять ссылки на действующие сертификаты.

В нашем же случае достаточно было указать корневой и выпускающий сертификаты Минцифры:

openssl verify -CAfile russian_trusted_root_ca_pem.crt -untrusted russian_trusted_sub_ca_pem.crt www.sberbank.ru.pem
Проверка сертификата Сбера пройдена
Проверка сертификата Сбера пройдена

Заключение

На этом гайд окончен. Если информация была полезна — поставьте лайк или подпишитесь на канал, чтобы чаще видеть в ленте подобный контент.

Всем добра!)