it4baer
Goto Top

P7b Zertifikate automatisiert exportieren

Hallo,

gibt es eine möglichkeit die einzelnen Zertifikate (Root, SubCA und End-Zertifikat) aus einem p7b Zertifikatpaket zu extrahieren?
=> ich habe leider nur einen Windows-Rechner zur Verfügung.

Am liebsten wäre es mir ohne extra Software (also z.B. mit Powershell oder Certutil...) <- geht hierbei um die gewerbliche Nutzung.

Vielen Dank

edit: leider habe ich kein openssl zur verfügung (so ne Anleitung hab ich im Internet schon gefunden)...

Content-Key: 344013

Url: https://administrator.de/contentid/344013

Printed on: April 25, 2024 at 06:04 o'clock

Member: colinardo
Solution colinardo Jul 20, 2017 updated at 11:49:10 (UTC)
Goto Top
Servus @it4baer ,
kein Problem, Powershell hat das .NET Framework zur Verfügung damit geht so ziemlich alles face-wink
(Ausgabe-Ordner und Dateiname der Datei angeben.)
$targetpath = "C:\Ausgabepfad"  
$certfile = "C:\Pfad\certificate_chain.p7b"  
$col = new-object System.Security.Cryptography.X509Certificates.X509Certificate2Collection
$col.Import($certfile)
$col | %{[IO.File]::WriteAllBytes("$targetpath\$($_.Thumbprint).crt",$_.Export('Cert'))}  
Die extrahierten Zertifikate erhalten als Namen den Thumbprint, das kannst du aber nach Gusto mit den verfügbaren Eigenschaften der Certs anpassen.

Sollte das Zertifikats-Paket (P7B/PFX/P12) passwortgeschützt sein dann muss die Zeile 4 so aussehen und das Passwort angegeben werden:
$col.Import($certfile,'PASSWORT',[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::PersistKeySet)
Mehr dazu kann in der Referenz der obigen NET-Klassen nachgelesen werden.

Grüße Uwe
Member: it4baer
it4baer Jul 20, 2017 at 11:56:25 (UTC)
Goto Top
wie geil ist dass denn...

1000000 danke face-smile
Member: colinardo
colinardo Jul 20, 2017 at 12:00:55 (UTC)
Goto Top
You're welcome face-smile.
Member: it4baer
it4baer Jul 26, 2017 at 08:36:02 (UTC)
Goto Top
andere Frage...

kann man via PowerShell aus p12 (also private Zertifikate) den öffentlichen Schlüssel exportieren?
<- ohne dieses zu Installieren?

also

Powershell
export öffentlicher_schlüssel from privaten_zertifikat

Vielen Dank
Member: colinardo
colinardo Jul 26, 2017 updated at 11:00:19 (UTC)
Goto Top
kann man via PowerShell aus p12 (also private Zertifikate) den öffentlichen Schlüssel exportieren? <- ohne dieses zu Installieren?
Den hast du doch schon mit den exportierten Zertifikaten face-smile. Die exportierten Zertifikate sind ja die öffentlichen Teile des P12-Containers, und installieren musst du es mit obigem Skript ja sowieso nicht.
Die einzelnen Eigenschaften der Zertifikate erhältst du ja aus der Collection, also bspw. den Public-Key des ersten Zertifikats aus der Collection
$col.GetPublicKey()

Ein p12/pfx ist kein einzelnes Zertifikat in dem Sinne sondern nur ein Container für eins/mehrere Zertifikate
https://en.wikipedia.org/wiki/PKCS_12
Member: it4baer
it4baer Jul 28, 2017 updated at 04:49:39 (UTC)
Goto Top
hm,

vermutlich stell ich mich zu blöd an...
=> das mit der Collection und dem "GetPublicKey()" versteh ich... aber beim Import will er mein privates Kennwort:
Ausnahme beim Aufrufen von Import mit 1 Argument(en): Das angegebene Netzwerkkennwort ist falsch.

<- was natürlich beim Automatisierten Entpacken von 30 Files oder mehr ziemlich viel Copy-Paste-Arbeit machen würde (vorallem weil ich ja nur die Öffentlichen und nicht die Privaten brauche).

wenn ich $col.Import($certFile, $password) eingebe gefällt ihn das auch nicht... in der Beschreibung will er noch eine "flag" aber auch das versteh ich leider nicht ganz.
$col.Import($certFile, $password, X509KeyStorageFlags.Exportable)

also bleiben "leider" noch 2 Fragen offen.
1. ist ein Export ohne Kennwort möglich?
2. wie :D ... <- sorry...

Vielen Dank für jede Hilfe...
Member: colinardo
Solution colinardo Jul 28, 2017 updated at 05:38:36 (UTC)
Goto Top
Und> Zitat von @it4baer:

hm,

vermutlich stell ich mich zu blöd an...
=> das mit der Collection und dem "GetPublicKey()" versteh ich... aber beim Import will er mein privates Kennwort:
Ausnahme beim Aufrufen von Import mit 1 Argument(en): Das angegebene Netzwerkkennwort ist falsch.

<- was natürlich beim Automatisierten Entpacken von 30 Files oder mehr ziemlich viel Copy-Paste-Arbeit machen würde (vorallem weil ich ja nur die Öffentlichen und nicht die Privaten brauche).
Der Container ist Passwort geschützt, deswegen musst du auch um an die öffentlichen Schlüssel zu kommen das Passwort für den Import in das Collectionobjekt angeben!
wenn ich $col.Import($certFile, $password) eingebe gefällt ihn das auch nicht... in der Beschreibung will er noch eine "flag" aber auch das versteh ich leider nicht ganz.
$col.Import($certFile, $password, X509KeyStorageFlags.Exportable)
Les doch bitte meine Zeile von oben mal ganz genau!
$col.Import($certfile,'PASSWORT',[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::PersistKeySet)  
In der Referenz stehts ja ebenfalls was die Flags bedeuten.
also bleiben "leider" noch 2 Fragen offen.
1. ist ein Export ohne Kennwort möglich?
2. wie :D ... <- sorry...
1. Nein
2. s.o. Wenn du eine Liste der Kennwörter hast hinterlege sie in einer Hashtable so dass man sie den Files zuordnen kann.