Я получаю цепочку сертификатов с openssl s_client -showcerts -connect host.whatever:443 </dev/null
.
В дополнение к этому я хотел бы программно извлечь корневой сертификат из цепочки в формате -----BEGIN CERTIFICATE-----.....-----END CERTIFICATE-----
Кто-нибудь знает о функциональности, которая способна на это и уже поставляется с OpenSSL?
openssl s_client
показывает вам только цепочку сертификатов, отправленную клиентом. Эта цепочка обычно не включает сам корневой сертификат. Вместо этого корневой сертификат содержится только в локальном хранилище доверенных сертификатов и не отправляется сервером. Насколько мне известно, встроенного способа получить корневой сертификат для соединения с помощью командной строки openssl не существует.
Для веб-сервера не имеет смысла отправлять корневой сертификат, и браузер должен игнорировать его, если он будет отправлен (он ДОЛЖЕН быть в локальном хранилище). Если это промежуточный сертификат ЦС, вы должны получить его так, как вы уже используете.