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?
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?
Antworten:
Wenn Sie opensslinstalliert haben, können Sie Folgendes ausführen:
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/', 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.
\*, 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)
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/\/.*$//'.
openssl x509 -noout -subject -nameopt multiline | grep commonName| sed -n 's/ *commonName *= //p'
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.
gnutls-certtoolwelches überbrew install gnutls
gnutls-bin
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.
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: