Отримати загальне ім'я (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:"

Зверніть увагу, що файл спрямований на стандартний вхід через <, а не використовувати його як аргумент. Sans 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
Майк Д

на встановленні debiangnutls-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для версії 3.5.8 (debian), 3.5.16 (Fedora, єдиною після цього в стабільній гілці за течією є 3.5.17 від місяць тому), онлайн-документація GnuTLS і, дійсно, сторінка для користувача Ubuntu 17.10 (така ж версія, як і поточний debian) стосуються:
goldilocks

"-i, --сертифікат-інформація: друкує інформацію щодо даного сертифіката", тоді як "-d" - "--debug". Дуже дивно. О_о?
золотинки

-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.