Konvertieren Sie den .p7b-Schlüssel in einen .pfx

10

Ich habe ein SSL-Zertifikat im .p7b-Format, das ich in .pfx konvertieren muss. Wenn ich dies über die Windows-Zertifikatverwaltung versuche, ist die Option zum Experten als PFX deaktiviert.

Beim Versuch mit openssl habe ich die folgenden zwei Befehle gefunden, um die Konvertierung durchzuführen:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

Ich bin mir jedoch nicht sicher, welchen Schlüssel ich für den zweiten Befehl verwenden soll oder auf welches Zertifikat CACert.cer verweist.

Wie kann ich diesen Schlüssel in das PFX-Format konvertieren?

DrStalker
quelle

Antworten:

20

PKCS # 7 enthält nicht den privaten (Schlüssel-) Teil eines Zertifikat / Privat-Schlüssel-Paares, sondern wird häufig für die Verbreitung von Zertifikaten verwendet (z. B. als Antwort auf eine PKCS # 10-Zertifikatanforderung, um S / MIME-Zertifikate zu verteilen wird zum Verschlüsseln von Nachrichten oder zum Überprüfen signierter Nachrichten usw. verwendet. Es ist wichtig zu beachten, dass dies nur für Zertifikate gilt, die per Definition öffentliche Elemente sind.

PKCS # 12 ist ein universellerer Container. Es soll sowohl den privaten Schlüssel als auch die öffentlichen Zertifikatsteile zusammen speichern, damit sie verschoben werden können. Es kann durch ein Passwort geschützt werden, um die Schlüssel zu schützen.

PFX war der Vorgänger von PKCS # 12.

Sie können (wie Anitak betont) nicht ohne zusätzliche Daten (der private Schlüsselteil) von PKCS # 7 nach PKCS # 12 konvertieren, da PKCS # 7 nicht über alle Daten verfügt.

Mark Sutton hat darauf hingewiesen, warum Sie nicht als PFX exportieren können. Der private Schlüssel des betreffenden Zertifikats ist als nicht exportierbar gekennzeichnet. Der Cryptographic Service Provider (CSP) lässt nicht zu, dass dieser Schlüssel verschoben wird. Dies ist beabsichtigt. Die einzige * Möglichkeit, ein exportierbares Zertifikat \ Schlüsselpaar zu erhalten, besteht darin, dass das ursprüngliche Zertifikat mit gesetztem exportierbaren Flag ausgestellt wurde. Es ist auch möglich, dass dem Zertifikat kein privater Schlüssel zugeordnet ist, aber ich gehe davon aus, dass dies hier nicht der Fall ist.

Es gibt eine gute Zusammenfassung der verschiedenen PKCS-Typen auf Wikipedia .

  • Zumindest der einzig legitime Weg. Abhängig von der CSP \ Crypto-Hardware gibt es möglicherweise Mechanismen, insbesondere nur für Software-CSPs. Dies ist jedoch nur für mich ein Bereich für die Sicherheitslückenforschung, nicht für Systemadministratoren.
Helvick
quelle
Vielen Dank - es sieht so aus, als wäre der Kauf eines neuen Zertifikats billiger als die Wiederherstellung, basierend auf der Zeit, die wir dafür mit einem Dritten zu tun haben.
DrStalker
12

Ich mache das alle 2 Jahre durch (wenn ich ein Code-Signing-Zertifikat erneuere) und es ist jedes Mal ein Schmerz.

Eine wichtige Information ist, dass Sie .p7b-Dateien einfach in .spc umbenennen können (wie hier angegeben: http://support.microsoft.com/kb/269395 ).

Sie können dann das Tool pvk2pfx.exe verwenden, um Ihre PVK + SPC in eine PFX zu konvertieren.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(Möglicherweise können Sie den Umbenennungsschritt für p7b überspringen und direkt verwenden. Ich habe es nicht versucht ...)

John Hart
quelle
Dies ist weitaus nützlicher als die akzeptierte Antwort. Ich bin erstaunt über den Stand des Codesignatur-Unsinns. Ich erschrecke bei dem Gedanken, dies immer wieder wiederholen zu müssen, wenn die Zertifikate ablaufen.
Tim
3

Wenn mit dem Windows-Tool die Option pfx deaktiviert ist, bedeutet dies, dass der private Schlüssel nicht aus dem lokalen Speicher exportiert werden kann. Dies liegt entweder daran, dass es nicht vorhanden ist (weil die Schlüssel nicht auf der von Ihnen verwendeten Box generiert wurden) oder dass beim Generieren der Schlüssel der private Schlüssel nicht als exportierbar markiert wurde und die Windows-Zertifikatvorlage nicht für den Export konfiguriert wurde.

Ich gehe davon aus, dass Sie eine Microsoft-Zertifizierungsstelle verwenden, um Ihre Zertifikate auszustellen. Ist das richtig?

Wenn ja, dann: -

1. Stellen Sie sicher, dass die Zertifikatvorlage den Export privater Schlüssel ermöglicht.
2.Wie generieren Sie Ihre Zertifikatanforderung? Sie können die folgende Technik verwenden

CREATE INF-Datei wie folgt

[Version]
Signature = "$ Windows NT $

[NewRequest]
Subject =" etc "
KeySpec = 1
Exportable = 1
MachineKeySet = TRUE
ProviderName =" CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

HINWEIS the Exportable = 1
Verwenden Sie dann die folgenden Befehle an der Eingabeaufforderung

certreq -new infile.inf reqfile.req // wobei infile.inf die obige Datei und reqfile die Ausgabeanforderungsdatei

certreq -submit -config \ reqfile.req ist // Sendet die Zertifizierungsanforderung an die Zertifizierungsstelle.

Sobald dies abgeschlossen ist, werden Sie Sie können das Zertifikat als pfx exportieren.

Alternativ gehen Sie zu http://www.blacktipconsulting.com/Site/Products.html. Dort habe ich mein kostenloses Befehlszeilentool installiert, das all dies für Sie erledigt und das Zertifikat nach Abschluss als pfx exportiert

Mark Sutton
quelle
2

Wie Helvick betonte, lautet die Antwort von PKCS10 PKCS7 und enthält nicht den privaten Schlüssel. Während der Generierung der CSR sollten Sie also die Datei privatekey.key generiert haben. Sie können die folgenden Befehle verwenden. (Ich weiß, dass dies eine vier Jahre alte Frage ist, aber ich konnte sie nicht beantworten, während ich der Diskussion auf der Seite folgte.)

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

Viel Glück!

Grüße, JE

java_enthu
quelle
Möglicherweise benötigen Sie das -informArgument nicht.
Palswim
1

Ich könnte mich irren, aber ich denke, Ihre PCKCS # 7-Datei enthält nur die öffentliche Hälfte Ihres Zertifikats.

Die PKCS # 12-Datei müsste beide Hälften haben - daher benötigt sie die -inkeyOption.

Alnitak
quelle