Mam plik SSL CRT w formacie PEM. Czy istnieje sposób na wyodrębnienie nazwy zwykłej (CN) z certyfikatu z wiersza poleceń?
Mam plik SSL CRT w formacie PEM. Czy istnieje sposób na wyodrębnienie nazwy zwykłej (CN) z certyfikatu z wiersza poleceń?
Odpowiedzi:
Jeśli masz openssl
zainstalowany, możesz uruchomić:
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/'
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.
\*
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)
sed
komendy 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/\/.*$//'
.
openssl x509 -noout -subject -nameopt multiline | grep commonName
lub tylko dla wartości| sed -n 's/ *commonName *= //p'
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 egrep
to 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
certtool
jest częścią gnutls, jeśli nie jest zainstalowany, po prostu go wyszukaj. GnuTLS jest trochę ładniejszy niż OpenSSL, IMO.
gnutls-certtool
który został zainstalowany za pośrednictwembrew install gnutls
gnutls-bin
Znalazłem powyższą odpowiedź i uznałem ją za bardzo przydatną, ale odkryłem również, że certtool
skł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 .crt
nie 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ę: certtool
produkcja jest o wiele łatwiejsza w obsłudze niż openssl
w tym przypadku.
certtool
która pobierała opcje bez zwykłych operatorów ( -
lub --
), a man certtool
dla 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: