У мене є файл SSL CRT у форматі PEM. Чи є спосіб я витягти загальне ім'я (CN) з сертифіката з командного рядка?
У мене є файл SSL CRT у форматі PEM. Чи є спосіб я витягти загальне ім'я (CN) з сертифіката з командного рядка?
Відповіді:
Якщо ви opensslвстановили, можете запустити:
openssl x509 -noout -subject -in server.pem
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'
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.
gnutls-certtoolякий було встановлено черезbrew install gnutls
gnutls-bin
Я знайшов вищезгадану відповідь і вважав, що це дуже корисно, але я також виявив, що certtoolсинтаксис команд (сьогодні на Ubuntu Linux) помітно відрізняється, ніж описано goldilocks, як і результат. Отже, я вважав, що найкраще оновити цю чудову відповідь тим, що може бути "сьогоднішньою версією".
"i"Варіант (тепер?) Чи означає «імпорт» в відповідно до man certtool, так що власне команда , як видається "d", «дисплей» . Отже, ця команда:
certtool d myfoo.crt
(Розширення для файлу в моєму випадку просто .crtне відповідає .pem... це не актуально.)
... отримує вихід, який у відповідній частині виглядає так:
Common Name : Foobar
Безперечно, золотники мали рацію: працювати з certtoolвиходом набагато простіше, ніж opensslу цьому випадку.
certtoolяка брала опції, не для звичайних операторів ( -або --), а man certtoolдля версії 3.5.8 (debian), 3.5.16 (Fedora, єдиною після цього в стабільній гілці за течією є 3.5.17 від місяць тому), онлайн-документація GnuTLS і, дійсно, сторінка для користувача Ubuntu 17.10 (така ж версія, як і поточний debian) стосуються: