Mam plik SSL CRT w formacie PEM. Czy istnieje sposób na wyodrębnienie nazwy zwykłej (CN) z certyfikatu z wiersza poleceń?
openssl
certificates
Naftuli Kay
źródło
źródło
Odpowiedzi:
Jeśli masz
openssl
zainstalowany, możesz uruchomić:źródło
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 dodatkowymsed
: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'
Zauważ, że ten plik jest kierowany do standardowego wejścia
<
, nie używając go jako argumentu. Sansegrep
to wydrukuje cały certyfikat, ale CN jest wSubject:
polu u góry (uwaga, że wIssuer:
polu jest też wartość CN ).certtool
jest częścią gnutls, jeśli nie jest zainstalowany, po prostu go wyszukaj. GnuTLS jest trochę ładniejszy niż OpenSSL, IMO.źródło
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ługman certtool
, więc właściwa komenda wydaje się być"d"
„display”. Więc to polecenie:(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:
Bez wątpienia, goldilocks miał rację:
certtool
produkcja jest o wiele łatwiejsza w obsłudze niżopenssl
w tym przypadku.źródło
certtool
która pobierała opcje bez zwykłych operatorów (-
lub--
), aman 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: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ąźródło