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?
openssl
certificates
Naftuli Kay
quelle
quelle
Antworten:
Wenn Sie
openssl
installiert haben, können Sie Folgendes ausführen:quelle
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)sed
oben 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 seinsed
: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'
Beachten Sie, dass die Datei über zur Standardeingabe geleitet wird
<
und nicht als Argument verwendet wird. Inegrep
diesem Fall wird das gesamte Zertifikat ausgedruckt, aber der CN befindet sich imSubject:
Feld ganz oben (achten Sie darauf, dass imIssuer:
Feld auch ein CN-Wert angegeben ist).certtool
ist Teil von gnutls, wenn es nicht installiert ist, suchen Sie danach. GnuTLS ist ein bisschen netter als OpenSSL, IMO.quelle
gnutls-certtool
welches überbrew install gnutls
gnutls-bin
Ich fand die obige Antwort und fand sie sehr nützlich, fand aber auch, dass sich die
certtool
Befehlssyntax (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", entsprechendman certtool
, so dass der richtige Befehl"d"
"anzeigen" zu sein scheint . Also, dieser Befehl:(Die Dateierweiterung in meinem Fall ist einfach
.crt
nicht.pem
... das ist nicht relevant.)... erzeugt eine Ausgabe, die im relevanten Teil so aussieht:
Ohne Frage hatte Goldlöckchen Recht: Die
certtool
Ausgabe ist viel einfacher zu bearbeiten alsopenssl
in diesem Fall.quelle
certtool
, die Optionen ohne die üblichen Operatoren (-
oder--
) hat, undman certtool
fü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: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 kannstquelle