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-ID: 344013

Url: https://administrator.de/forum/p7b-zertifikate-automatisiert-exportieren-344013.html

Ausgedruckt am: 22.12.2024 um 23:12 Uhr

colinardo
Lösung colinardo 20.07.2017 aktualisiert um 13:49:10 Uhr
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
it4baer
it4baer 20.07.2017 um 13:56:25 Uhr
Goto Top
wie geil ist dass denn...

1000000 danke face-smile
colinardo
colinardo 20.07.2017 um 14:00:55 Uhr
Goto Top
You're welcome face-smile.
it4baer
it4baer 26.07.2017 um 10:36:02 Uhr
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
colinardo
colinardo 26.07.2017 aktualisiert um 13:00:19 Uhr
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
it4baer
it4baer 28.07.2017 aktualisiert um 06:49:39 Uhr
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...
colinardo
Lösung colinardo 28.07.2017 aktualisiert um 07:38:36 Uhr
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.