So exportieren Sie eine CA-Zertifikatkette von PFX im PEM-Format ohne Beutelattribute

31

Ich habe eine PKCS12-Datei, die die vollständige Zertifikatskette und den privaten Schlüssel enthält. Ich muss es in 3 Dateien für eine Anwendung aufteilen. Die 3 benötigten Dateien lauten wie folgt (im PEM-Format):

  • eine unverschlüsselte Schlüsseldatei
  • eine Client-Zertifikatdatei
  • eine CA-Zertifikatdatei (Root und alle Zwischenprodukte)

Dies ist eine häufige Aufgabe, die ich ausführen muss. Daher suche ich nach einer Möglichkeit, dies ohne manuelle Bearbeitung der Ausgabe zu tun.

Ich habe folgendes versucht:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

Dies funktioniert einwandfrei, die Ausgabe enthält jedoch bag-Attribute, mit denen die Anwendung nicht umgehen kann.

Nach einigem Suchen fand ich eine vorgeschlagene Lösung, die Ergebnisse durch x509 zu leiten, um die Beutelattribute zu entfernen.

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

Dies funktioniert, aber ich stoße auf ein Problem mit der Cacert-Datei. Die Ausgabedatei enthält nur eines der 3 Zertifikate in der Kette.

Gibt es eine Möglichkeit, zu vermeiden, dass die bag-Attribute in die Ausgabe des Befehls pkcs12 einbezogen werden, oder eine Möglichkeit, dass die Ausgabe des Befehls x509 alle Zertifikate enthält? Gibt es außerdem eine Möglichkeit, die Ausgabe von pkcs12 in x509 umzuleiten, wenn es die einfachste Lösung ist, x509 zu durchlaufen, anstatt die Datei zweimal zu schreiben?

BryKKan
quelle

Antworten:

36

Die Lösung, zu der ich schließlich kam, war, es durch sed zu leiten.

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>
BryKKan
quelle
Vielen Dank! Das hat mir heute etwas Zeit gespart! ;-)
Jim P.
Ich danke dir sehr!
26.