alle Zertifikate in einer PEM-Zertifikatsdatei (vollständige Zertifikatskette) mit openssl oder einem anderen Befehl anzeigen

alle Zertifikate in einer PEM-Zertifikatsdatei (vollständige Zertifikatskette) mit openssl oder einem anderen Befehl anzeigen

Oft enthalten Zertifikatsdateien (im PEM-Format) mehrere Zertifikate, wie:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----

mit dem Befehl: openssl x509 -in cert.pem -noout -textkann ich den ersten Eintrag sehen.

Gibt es eine integrierte Möglichkeit, den zweiten Eintrag oder alle Einträge anzuzeigen?

Gibt es eine einfache Möglichkeit, alle Einträge anzuzeigen?

Was mich wirklich interessiert, sind: C, ST, O, OU, CN, des Subjekts, der Aussteller und die Gültigkeitsdaten des Subjekts

Antwort1

Die Post Wie kann ich alle SSL-Zertifikate in einem Paket anzeigen? schlägt mehrere Möglichkeiten vor:

openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout (gives shorter output)
keytool -printcert -v -file <certs.crt>

Der Beitrag enthält weitere Variationen bei der Verwendung von Perl, Bash, Awk und anderen Dienstprogrammen.

Antwort2

Ich würde ein anderes Tool als OpenSSL vorschlagen: Ein anderer beliebter TLS-Stack, GnuTLS, hat ein ähnliches certtoolProgramm, das eine Ausgabe im gleichen Format erzeugt.

certtool -i < multiplecerts.pem

(Sie unterscheiden sich in einigen kleinen Details, beispielsweise bei der Dekodierung weniger gebräuchlicher Zertifikatserweiterungen.)

Antwort3

Ich weiß, das ist alt, aber ich bin hierher gekommen, als ich nach Betreff, Gültigkeitsdaten und Aussteller aus einer Zertifikatskette im PEM-Format suchte, die ziemlich viele auskommentierte Zeilen enthielt.

Nach ausführlicher Lektüre der Sed-Dokumentation auf GNU.org habe ich mich für die folgende Lösung unter RHEL7 mit Bash 4.2.46 entschieden:sed-Mehrzeilentechniken

for CULPRIT in $(sed -n '/^-----BEGIN.*CERTIFICATE-----/{n;p}' CHAIN-FILE-NAME); do
VICTIM="$(printf "${CULPRIT}" | sed -e 's,\/,\\\/,g')"
sed -e '/./{H;$!d;}' -e 'x;/'"${VICTIM}"'/!d' CHAIN-FILE-NAME | openssl x509 -subject -dates -issuer -noout
done

verwandte Informationen