Вопрос или проблема
При использовании Chrome (а также, вероятно, других браузеров) я могу проверить цепочку сертификатов:
Отсюда я могу экспортировать полную цепочку в формате Base64-кодированного ASCII, цепочка сертификатов
Полученный файл выглядит примерно так:
-----BEGIN CERTIFICATE-----
MIIDqzCCAzGgAwIBAgISBNJAnQnZ18furlY6bSIhUWVTMAoGCCqGSM49BAMDMDIx
...
GdWDvkyg3wNvGaH94nrgRdvyFRcAc8Vekw8mjyGYAw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
...
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
...
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----
Вопрос в том, как я могу получить точно такой же результат с помощью openssl?
Как просмотреть цепочку сертификатов с использованием openssl связано с этим, но выполнение следующей команды:
echo | openssl s_client -connect serverfault.com:443 -showcerts
Возвращает только 2 блока сертификатов, а не полную цепочку. И в ней есть другие части, мне просто нужны BEGIN -> END CERTIFICATE.
Бонусный вопрос: как в технических терминах называется часть BEGIN -> END CERTIFICATE?
Ответ или решение
Для экспорта полного цепочки сертификатов сайта с использованием OpenSSL, аналогично тому, как это делают браузеры, такие как Chrome, необходимо выполнить несколько шагов. Здесь я поясню, как это сделать, и отвечу на бонусный вопрос о том, как правильно называть части сертификата.
Шаги для экспорта полного цепочки сертификатов
-
Убедитесь, что OpenSSL установлен: Первым делом проверьте, что программа OpenSSL установлена на вашем компьютере. Если нет, установите её, следуя инструкциям для вашей операционной системы.
-
Получение сертификатов с используя s_client: Откройте терминал и выполните следующую команду, заменив
example.com
на доменное имя, для которого вы хотите получить сертификаты:echo | openssl s_client -connect example.com:443 -showcerts
Данная команда инициирует соединение с сервером через порт 443 (стандартный для HTTPS) и выведет информацию о сертификатах, включая цепочку.
-
Фильтрация сертификатов: Вы получите вывод, содержащий множество строк, включая информацию о соединении и самих сертификатах. Чтобы отфильтровать только сертификаты, выполните следующую команду:
echo | openssl s_client -connect example.com:443 -showcerts 2>/dev/null | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/' RS='' | sed 's/^.*\(\(-----BEGIN CERTIFICATE-----\|-----END CERTIFICATE-----\)\s*\n\|\(\.\|\n\)*\)*\s*//g; s/\n\s+/ /g'
В этой команде:
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/'
ищет блоки сертификатов отBEGIN CERTIFICATE
доEND CERTIFICATE
.RS=''
используется для обработки блоков текста.sed
дополнительно очищает вывод для его лучшего отображения.
-
Экспорт в файл: Если вы хотите экспортировать сертификаты в отдельный файл, выполните следующую команду:
echo | openssl s_client -connect example.com:443 -showcerts 2>/dev/null | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/' RS='' > cert_chain.pem
После выполнения этой команды сертификаты будут сохранены в файл
cert_chain.pem
в формате Base64-encoded ASCII, который может быть открыт и просмотрен с помощью текстового редактора.
Технические термины
Что касается бонусного вопроса о технических терминах, части, заключенные между строками -----BEGIN CERTIFICATE-----
и -----END CERTIFICATE-----
, называют "дистанционными сертификационными блоками" или просто "сертификатами". В контексте PKI (Public Key Infrastructure) это выражение указывает на сертификат, который содержит публичный ключ и информацию о владельце, а также подпись удостоверяющего центра (CA).
Заключение
С помощью вышеприведенных шагов вы можете легко экспортировать полную цепочку сертификатов аналогично тому, как это делают браузеры. Понимание процесса и использование правильных команд позволит вам эффективно управлять сертификатами и обеспечивать безопасность ваших веб-приложений.