Ich habe eine CRT-Datei für das Zertifikatbündel.
Dabei wird openssl x509 -in bundle.crt -text -noout
nur das Stammzertifikat angezeigt.
Wie sehe ich alle anderen Zertifikate?
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 schlägt diesen Einzeiler vor:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
Es hat in der Tat funktioniert, aber ich verstehe die Details nicht und kann daher nicht sagen, ob es irgendwelche Einschränkungen gibt.
/etc/ssl/certs/ca-certificates.crt
und bekamunable to load PKCS7 object
Java
keytool
macht den Trick:Anmerkung: Windows Doppelklick funktioniert nicht. Windows liest nur das erste Zertifikat im Keystore und erweitert automatisch die Vertrauenskette aus dem integrierten Zertifikatspeicher.
Ergebnisse:
.crt
Datei werden nicht angezeigt.crt
Datei. Dies kann zu falschen Schlussfolgerungen führen.quelle
Das Befolgen dieser FAQ führte mich zu diesem Perl-Skript , das mir sehr nahe legt, dass
openssl
es keine native Unterstützung für die Verarbeitung des n- ten Zertifikats in einem Bundle gibt und dass wir stattdessen ein Tool verwenden müssen, um die Eingabe vor dem Einziehen in Segmente aufzuteilen Zertifikat anopenssl
. Dieses Perl-Skript, das frei von dem oben verlinkten Skript von Nick Burch angepasst wurde, scheint die Aufgabe zu erfüllen:quelle
Oneliner, der eine Zusammenfassung aller Zertifikate in der Datei anzeigt.
(Ähnliches Kommando, das in einer anderen Antwort erwähnt wurde, aber dies ergibt eine kürzere Ausgabe ohne die Option --text).
Beispiel:
quelle
Dies mag nicht hübsch oder elegant sein, aber es war schnell und funktionierte für mich mit Bash unter Linux und PEM-formatierten Blöcken in einer ca-cert-Bundle-Datei.
Sie können alles auf eine Zeile setzen und die Optionen von openssl an Ihre Bedürfnisse anpassen. Ich wünschte wirklich, es gäbe eine elegantere Lösung dafür, aber in diesem Fall hätte es meiner Meinung nach mehr Zeit gekostet, die elegantere Lösung zu finden, als die unelegante herauszuhacken.
quelle
Da es keine awk-basierte Lösung gibt:
Das erste Befehlspaket wurde in Certs aufgeteilt, indem nach den Zeilen BEGIN und END gesucht wurde. Der zweite Befehl durchläuft die extrahierten Zertifikate und zeigt sie an.
quelle
In bash wird normalerweise nur eine (lange) Codezeile benötigt :-)
quelle
Kleine Änderung am Beitrag von MadHatter, damit Sie direkt in die CLI kopieren / einfügen können. Ich habe auch den MD5-Hash eingefügt, der hilfreich ist, um sicherzustellen, dass die Zertifikate korrekt sind. Die zurückgegebene stdin-Zeile ist der md5-Hash der Zertifikate.
Wenn Sie eine kurze, prägnante Ausgabe sehen möchten, verwenden Sie diese Version. Hilfreich, wenn Sie nur überprüfen, ob Sie alle Zertifikate enthalten haben, aber nicht wirklich die Verwendung / usw. der Zertifikate überprüfen.
Nur für den Fall, dass Ihre openssl-Version nicht alle diese Flags unterstützt, können Sie egrep verwenden. Das Gleiche wie das erste, aber einfach an egrep weiterleiten.
Gehen Sie folgendermaßen vor, um den MD5-Hash des privaten Schlüssels zu überprüfen.
Referenz: SSL Shopper - Certificate Key Matcher
quelle
Hier ist eine awk-basierte Lösung, die keine Zwischendateien benötigt.
Es funktioniert durch Lesen von PEM-Blöcken aus stdin und Verketten jedes Blocks zu einer einzelnen Base64-codierten Zeile. Die Zeilen werden dann gelesen, dekodiert und als DER-kodierte Zertifikate an openssl übergeben.
quelle
cat bundle.crt | awk -v cmd="openssl x509 -subject -noout" '/-----BEGIN/ { c = $0; next } c { c = c "\n" $0 } /-----END/ { print c|cmd; close(cmd); c = 0 }'
.Ich möchte die idiomatische Perl-Kommandozeile hier einfügen:
Wenn es Text gibt, dann ein etwas robusterer Tweak:
Ändern Sie einfach den Wert von n in der zweiten Anweisung, um das n-te Zertifikat zu erhalten.
quelle
Windows-Methode
Eine Möglichkeit, wie Sie die gesamte Kette sehen können, besteht darin (unter Windows natürlich), auf das CRT zu doppelklicken und dann auf die Registerkarte "Zertifizierungspfad" zuzugreifen. Es wird die gesamte Kette angezeigt, auch wenn es nur ein Intermediate- oder Root-Zertifikat gibt. Siehe Screenshot unten für Details. Wenn Sie nicht unter Windows arbeiten, entschuldige ich mich für meine mangelnden Kenntnisse in Bezug auf Unix / Linux-Varianten.
Hinweis: Dies kann zu falschen Ergebnissen führen, wenn sich das Zwischenzertifikat in Ihrem lokalen Keystore befindet. Windows fügt es automatisch hinzu und zeigt nicht nur an, was im Bundle enthalten war.
Linux (Ubuntu-Methode)
Ich habe dein erstes Kommando übersehen und du hast eine Sache falsch gemacht. Ihr Befehl sollte folgendermaßen aussehen:
Quelle: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
quelle
openssl
Aufruf einen Syntaxfehler verursacht hat, sondern dass nur das erste Zertifikat im Paket aufgeführt ist. Zweitens sind die beiden Aufrufe funktional identisch. Drittens, und wahrscheinlich am wichtigsten, funktioniert auch deins nicht, zumindest für mich; Auch hier wird nur das erste Zertifikat im Bundle aufgelistet.