%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20openssl%20%D0%B8%D0%BB%D0%B8%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B.png)
часто файлы сертификатов (в формате PEM) содержат несколько сертификатов, например:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----
с помощью команды:
openssl x509 -in cert.pem -noout -text
Я вижу первую запись.
Есть ли встроенный способ отобразить вторую запись или все записи?
Есть ли простой способ просмотреть все записи?
Меня действительно интересуют: C, ST, O, OU, CN, субъекта, эмитент и даты действия субъекта.
решение1
Пост Как просмотреть все SSL-сертификаты в пакете? предполагает несколько возможностей:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout (gives shorter output)
keytool -printcert -v -file <certs.crt>
В посте приведены дополнительные варианты использования Perl, bash, awk и других утилит.
решение2
Я бы предложил инструмент, не относящийся к OpenSSL: другой популярный стек TLS, GnuTLS, имеет похожую certtool
программу, которая выдает выходные данные в том же формате.
certtool -i < multiplecerts.pem
(Они различаются в некоторых мелких деталях, таких как декодирование менее распространенных расширений сертификатов.)
решение3
Я знаю, что это устарело, но я нашел этот способ, пытаясь получить тему, даты действия и издателя из цепочки сертификатов в формате PEM, которая содержала довольно много закомментированных строк.
Итак, на RHEL7 с bash 4.2.46 я остановился на следующем решении после тщательного изучения документации sed на GNU.org:многострочные методы sed
for CULPRIT in $(sed -n '/^-----BEGIN.*CERTIFICATE-----/{n;p}' CHAIN-FILE-NAME); do
VICTIM="$(printf "${CULPRIT}" | sed -e 's,\/,\\\/,g')"
sed -e '/./{H;$!d;}' -e 'x;/'"${VICTIM}"'/!d' CHAIN-FILE-NAME | openssl x509 -subject -dates -issuer -noout
done