Uzyskaj nazwę zwyczajową (CN) z certyfikatu SSL?


64

Mam plik SSL CRT w formacie PEM. Czy istnieje sposób na wyodrębnienie nazwy zwykłej (CN) z certyfikatu z wiersza poleceń?


3
Należy jednak pamiętać, że w certyfikatach wielodomenowych CN nie zawiera wszystkich z nich.
Torsten Bronger

Odpowiedzi:


90

Jeśli masz opensslzainstalowany, możesz uruchomić:

openssl x509 -noout -subject -in server.pem

5
Możesz wyodrębnić CN z tematu za pomocą:openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Matthew Buckett

1
Zmodyfikowałem to, co powiedział @MatthewBuckett i zwykłem sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/'uzyskiwać tylko domenę, ponieważ miałem dodatkowe szczegóły po CN. Nie jest to ścisłe dopasowanie do prawidłowej CN, ale w większości przypadków działa, możesz być bardziej luźny i zastąpić [a-zA-Z0-9\.\-]go, [^/]ale nie jestem pewien, czy to zawsze zadziała.
flungo

1
Dodaj \*do tego, czego @flungo używał do obsługi domen z symbolami wieloznacznymi: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]choć w moim przypadku działa)
bryn

1
Te sedkomendy je powyżej nie będzie działać, jeśli cert ma względne Nazwy wyróżniające (RDNS) określona po Common Name (CN), na przykład OU (organizationalUnit) lub C (Kraj). Jednym ze sposobów, aby zaspokoić takich przypadkach byłby dodatkowym sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
Ohad Schneider,

6
Łatwiejszy sposób na oddzielenie CN od innych RDN / ATV w nazwie przedmiotu: openssl x509 -noout -subject -nameopt multiline | grep commonNamelub tylko dla wartości| sed -n 's/ *commonName *= //p'
dave_thompson_085

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

Zauważ, że ten plik jest kierowany do standardowego wejścia <, nie używając go jako argumentu. Sans egrepto wydrukuje cały certyfikat, ale CN jest w Subject:polu u góry (uwaga, że ​​w Issuer:polu jest też wartość CN ).

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

certtooljest częścią gnutls, jeśli nie jest zainstalowany, po prostu go wyszukaj. GnuTLS jest trochę ładniejszy niż OpenSSL, IMO.


2
Dobra odpowiedź, +1. W przypadku systemu Mac OS X musiałem użyć tego, gnutls-certtoolktóry został zainstalowany za pośrednictwembrew install gnutls
Mike D

na instalacji Debianagnutls-bin
rubo77

1

Znalazłem powyższą odpowiedź i uznałem ją za bardzo przydatną, ale odkryłem również, że certtoolskładnia polecenia (w Ubuntu Linux, dziś) jest zauważalnie inna niż opisana przez goldilocks, podobnie jak wynik. Pomyślałem więc, że najlepiej zaktualizować tę doskonałą odpowiedź, która może być „dzisiejszą wersją”.

"i"Opcja (teraz?) Oznacza „importu”, według man certtool, więc właściwa komenda wydaje się być "d"„display”. Więc to polecenie:

certtool d myfoo.crt

(Rozszerzenie pliku w moim przypadku po prostu .crtnie jest .pem... to nie ma znaczenia.)

... tworzy dane wyjściowe, które w odpowiedniej części wyglądają tak:

Common Name     : Foobar

Bez wątpienia, goldilocks miał rację: certtoolprodukcja jest o wiele łatwiejsza w obsłudze niż opensslw tym przypadku.


1
Podejrzewam, że mówimy o zupełnie różnych programach. Nigdy nie widziałem wersji, certtoolktóra pobierała opcje bez zwykłych operatorów ( -lub --), a man certtooldla v. 3.5.8 (debian), 3.5.16 (fedora, jedyną wersją późniejszą w stabilnym odgałęzieniu jest 3.5.17 z miesiąc temu), dokumentacja online GnuTLS i rzeczywiście internetowa strona podręcznika dla Ubuntu 17.10 (ta sama wersja co obecny debian) odnoszą się do:
goldilocks

„-i, --certificate-info: wyświetlanie informacji o danym certyfikacie”, podczas gdy „-d” to „--debug”. Bardzo dziwny. Ooo
goldilocks,

-1

Użyłem: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'dodaj, | sed -e 's/^[ \t]*//'jeśli nie możesz żyć z białą przestrzenią

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.