Иногда у заказчика может быть самоподписанный сертификат, который выпущен непонятно каким образом, а целостность цепочки не вызывает доверия.
Чтобы каждый мог повторить все действия, описанные в статье, будем проверять сертификат Сбербанка, выданный Минцифры.
Проверка удалённого сертификата
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
Заключение
На этом гайд окончен. Если информация была полезна — поставьте лайк или подпишитесь на канал, чтобы чаще видеть в ленте подобный контент.
Всем добра!)