Получить общее имя (CN) из сертификата SSL?


64

У меня есть файл SSL CRT в формате PEM. Есть ли способ, которым я могу извлечь общее имя (CN) из сертификата из командной строки?


3
Однако обратите внимание, что в многодоменных сертификатах CN не содержит их все.
Торстен Бронджер

Ответы:


90

Если вы opensslустановили, вы можете запустить:

openssl x509 -noout -subject -in server.pem

5
Вы можете извлечь CN из предмета с помощью:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Мэтью Бакетт

1
Я изменил то, что сказал @MatthewBuckett, и использовал sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'только домен, так как у меня были дополнительные подробности после CN. Его не очень строгое соответствие для действительного CN , но в большинстве случаев это работает, вы могли бы быть более вялым и заменить [a-zA-Z0-9\.\-]с , [^/]но я не уверен , что всегда будет работать.
flungo

1
Добавьте \*к тому, что @flungo использовал для поддержки доменов подстановки: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]хотя в моем случае это работает)
bryn

1
Эти sedкоманды , предложенные выше , не будет работать , если сертификат имеет Относительные различающиеся имена (RDNS) , указанные после Common Name (CN), например , OU (OrganizationalUnit) или C (Страна). Один из способов удовлетворения таких случаев будет дополнительно sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
Охад Шнайдер

6
Более простой способ отделить CN от других RDN / ATV в имени субъекта: openssl x509 -noout -subject -nameopt multiline | grep commonNameили только для значения| sed -n 's/ *commonName *= //p'
dave_thompson_085

7
certtool -i < whatever.pem | egrep "^\s+Subject:"

Обратите внимание, что это направляет файл на стандартный ввод через <, а не использует его в качестве аргумента. Без egrepэтого будет распечатан весь сертификат, но CN находится в Subject:поле рядом с верхом (будьте осторожны, есть также значение CN в Issuer:поле).

X.509 Certificate Information:
    Version: 3
    Serial Number (hex): 01
    Issuer: [...] CN=unixandlinux.ex  <- Not this one.
    Validity: ...
    Subject: CN=goldilocks

certtoolявляется частью gnutls, если он не установлен, просто найдите его. GnuTLS немного лучше OpenSSL, IMO.


2
Хороший ответ, +1. Для Mac OS X мне пришлось использовать тот, gnutls-certtoolкоторый был установлен черезbrew install gnutls
Mike D

на Debian установитьgnutls-bin
rubo77

1

Я нашел приведенный выше ответ и нашел его очень полезным, но я также обнаружил, что certtoolсинтаксис команды (в Ubuntu Linux, сегодня) заметно отличался от описанного в goldilocks, как и вывод. Поэтому я подумал, что лучше дополнить этот превосходный ответ тем, что может быть «сегодняшней версией».

"i"Вариант (теперь?) Означает «импорт» в соответствии с man certtool, так что собственно команда , как представляется "d", «дисплей» . Итак, эта команда:

certtool d myfoo.crt

(Расширение файла в моем случае просто .crtне .pem... это не имеет значения.)

... производит вывод, который в соответствующей части выглядит следующим образом:

Common Name     : Foobar

Несомненно, ленок был прав: certtoolвыход гораздо проще проще работать, чем opensslв данном случае.


1
Я подозреваю, что мы говорим о совершенно разных частях программного обеспечения. Я никогда не видел версию, в certtoolкоторой бы использовались параметры без обычных операторов ( -или --), а man certtoolдля v. 3.5.8 (debian), 3.5.16 (fedora, единственная версия после этого в стабильной ветке upstream - 3.5.17 от месяц назад), электронная документация GnuTLS и, действительно, онлайновая справочная страница по Ubuntu 17.10 (та же версия, что и у текущего Debian), ссылаются на:
goldilocks

"-i, --certificate-info: вывести информацию о данном сертификате", тогда как "-d" - это "--debug". Очень странно. O_o?
Златовласка

-1

Я использовал: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'добавить | sed -e 's/^[ \t]*//'Если вы не можете жить с пустым пространством

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.