Common Name (CN) vom SSL-Zertifikat erhalten?

64

Ich habe eine SSL-CRT-Datei im PEM-Format. Gibt es eine Möglichkeit, den allgemeinen Namen (Common Name, CN) aus dem Zertifikat über die Befehlszeile zu extrahieren?

Naftuli Kay
quelle
3
Beachten Sie jedoch, dass CN in Multidomänenzertifikaten nicht alle Zertifikate enthält.
Torsten Bronger

Antworten:

90

Wenn Sie opensslinstalliert haben, können Sie Folgendes ausführen:

openssl x509 -noout -subject -in server.pem
Jeff Smith
quelle
5
Sie können die CN mit folgendem openssl x509 -noout -subject -in server.pem | sed -n '/^subject/s/^.*CN=//p'
Befehl
1
Ich änderte, was @MatthewBuckett sagte und verwendete sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-]*\).*$/\1/', um gerade die Domain zu erhalten, da ich zusätzliche Details nach dem CN hatte. Sein nicht super strenges Matching für eine gültige CN aber in den meisten Fällen funktioniert es, könnten Sie mehr schlaff und ersetzen sein [a-zA-Z0-9\.\-]mit , [^/]aber ich bin nicht sicher , dass immer funktionieren wird.
Flungo
1
Fügen Sie hinzu \*, was @flungo zur Unterstützung von Wildcard-Domains verwendet hat: sed -e 's/^subject.*CN=\([a-zA-Z0-9\.\-\*]*\).*$/\1/' ( [^/]funktioniert in meinem Fall jedoch)
bryn
1
Die sedoben vorgeschlagenen Befehle funktionieren nicht, wenn für das Zertifikat Relative Distinguished Names (RDNs) nach dem Common Name (CN) angegeben sind, z. B. OU (OrganizationalUnit) oder C (Country). Eine Möglichkeit für solche Fälle bieten würde eine zusätzliche sein sed: openssl x509 -noout -subject -in server.pem | sed 's/^.*CN=//' | sed sed 's/\/.*$//'.
Ohad Schneider
6
Einfachere Möglichkeit, CN von anderen RDN / ATVs im openssl x509 -noout -subject -nameopt multiline | grep commonName| sed -n 's/ *commonName *= //p'
Betreffnamen
7
certtool -i < whatever.pem | egrep "^\s+Subject:"

Beachten Sie, dass die Datei über zur Standardeingabe geleitet wird <und nicht als Argument verwendet wird. In egrepdiesem Fall wird das gesamte Zertifikat ausgedruckt, aber der CN befindet sich im Subject:Feld ganz oben (achten Sie darauf, dass im Issuer:Feld auch ein CN-Wert angegeben ist).

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

certtoolist Teil von gnutls, wenn es nicht installiert ist, suchen Sie danach. GnuTLS ist ein bisschen netter als OpenSSL, IMO.

Goldlöckchen
quelle
2
Gute Antwort, +1. Für Mac OS X musste ich verwenden, gnutls-certtoolwelches überbrew install gnutls
Mike D
auf debian installgnutls-bin
rubo77
1

Ich fand die obige Antwort und fand sie sehr nützlich, fand aber auch, dass sich die certtoolBefehlssyntax (unter Ubuntu Linux heute) merklich von der von goldilocks beschriebenen unterscheidet, ebenso wie die Ausgabe. Daher hielt ich es für das Beste, diese ausgezeichnete Antwort mit der "heutigen Version" zu aktualisieren.

Die "i"Option (jetzt?) Steht für "importieren", entsprechend man certtool, so dass der richtige Befehl "d""anzeigen" zu sein scheint . Also, dieser Befehl:

certtool d myfoo.crt

(Die Dateierweiterung in meinem Fall ist einfach .crtnicht .pem... das ist nicht relevant.)

... erzeugt eine Ausgabe, die im relevanten Teil so aussieht:

Common Name     : Foobar

Ohne Frage hatte Goldlöckchen Recht: Die certtoolAusgabe ist viel einfacher zu bearbeiten als opensslin diesem Fall.

Mike Robinson
quelle
1
Ich vermute, wir sprechen über völlig andere Software. Ich habe noch nie eine Version gesehen certtool, die Optionen ohne die üblichen Operatoren ( -oder --) hat, und man certtoolfür v. 3.5.8 (debian), 3.5.16 (fedora, die einzige Version danach im Upstream-Stable-Zweig ist 3.5.17 von (vor einem Monat), die Online-Dokumentation von GnuTLS und die Online-Manpage für Ubuntu 17.10 (dieselbe Version wie das aktuelle Debian) beziehen sich alle auf:
Goldlöckchen
„-i, --certificate-info: Drucke Informationen zu dem betreffenden Zertifikat“ , während „-d“ ist „debug“. Sehr eigenartig. O_o?
Goldlöckchen
-1

Ich habe gesagt: openssl x509 -noout -subject -in mycert.crt | awk -F= '{print $NF}'add | sed -e 's/^[ \t]*//'Wenn du nicht mit dem weißen Raum leben kannst

djieno
quelle