У меня есть файл SSL CRT в формате PEM. Есть ли способ, которым я могу извлечь общее имя (CN) из сертификата из командной строки?
openssl
certificates
Нафтули Кей
источник
источник
Ответы:
Если вы
openssl
установили, вы можете запустить:источник
openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'
только домен, так как у меня были дополнительные подробности после CN. Его не очень строгое соответствие для действительного CN , но в большинстве случаев это работает, вы могли бы быть более вялым и заменить[a-zA-Z0-9\.\-]
с ,[^/]
но я не уверен , что всегда будет работать.\*
к тому, что @flungo использовал для поддержки доменов подстановки:sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/'
([^/]
хотя в моем случае это работает)sed
команды , предложенные выше , не будет работать , если сертификат имеет Относительные различающиеся имена (RDNS) , указанные после Common Name (CN), например , OU (OrganizationalUnit) или C (Страна). Один из способов удовлетворения таких случаев будет дополнительноsed
:openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'
.openssl x509 -noout -subject -nameopt multiline | grep commonName
или только для значения| sed -n 's/ *commonName *= //p'
Обратите внимание, что это направляет файл на стандартный ввод через
<
, а не использует его в качестве аргумента. Безegrep
этого будет распечатан весь сертификат, но CN находится вSubject:
поле рядом с верхом (будьте осторожны, есть также значение CN вIssuer:
поле).certtool
является частью gnutls, если он не установлен, просто найдите его. GnuTLS немного лучше OpenSSL, IMO.источник
gnutls-certtool
который был установлен черезbrew install gnutls
gnutls-bin
Я нашел приведенный выше ответ и нашел его очень полезным, но я также обнаружил, что
certtool
синтаксис команды (в Ubuntu Linux, сегодня) заметно отличался от описанного в goldilocks, как и вывод. Поэтому я подумал, что лучше дополнить этот превосходный ответ тем, что может быть «сегодняшней версией»."i"
Вариант (теперь?) Означает «импорт» в соответствии сman certtool
, так что собственно команда , как представляется"d"
, «дисплей» . Итак, эта команда:(Расширение файла в моем случае просто
.crt
не.pem
... это не имеет значения.)... производит вывод, который в соответствующей части выглядит следующим образом:
Несомненно, ленок был прав:
certtool
выход гораздо проще проще работать, чемopenssl
в данном случае.источник
certtool
которой бы использовались параметры без обычных операторов (-
или--
), аman certtool
для v. 3.5.8 (debian), 3.5.16 (fedora, единственная версия после этого в стабильной ветке upstream - 3.5.17 от месяц назад), электронная документация GnuTLS и, действительно, онлайновая справочная страница по Ubuntu 17.10 (та же версия, что и у текущего Debian), ссылаются на:Я использовал:
openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'
добавить| sed -e 's/^[ \t]*//'
Если вы не можете жить с пустым пространствомисточник