Mit Powershell auf den Zertifikatsspeicher zurückzugreifen, ist sehr simpel, denn Powershell stellt für den Zugriff auf Zertifikate einen Powershell-Provider bereit. Durch den Provider ist es möglich, Zertifikate wie Dateien zu behandeln. Der Provider legt hierfür ein "Laufwerk" mit Namen Cert: an. Möchten Sie z.B. die Zertifikate des aktuellen Benutzers sehen, geben Sie ein:
PS C:\Users\Holger> Get-ChildItem -Path Cert:\CurrentUser\My\
PSParentPath: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
A83FA591D2D909D7465768ED4F7DE4019026F74D CN=Holger
7154EBF108BEB11587B1136B06EC5C24E3E6CAEA CN=NWCertRoot
6C0CEA5EC15CA5E6350CB9E7D02D90C9AA1DEBE3 CN=NwClientCert
Zurückgeliefert wird der eindeutige Thumbprint des Zertifikats, sowie dessen Name. Um ein Zertifikat ins Dateisystem zu exportieren, verwenden Sie das Cmdlet Export-Certificate:
Get-ChildItem -Path Cert:\CurrentUser\My\ |
Where-Object { $_.subject -eq "cn=NWCertRoot" } |
Export-Certificate -Type CERT -FilePath $home\NWCertRoot.cer
Das klappt ganz wunderbar, allerdings unterstützt Export-Certificate nur den Export des Binärformats. Müssen Sie das Zertifikat Base64-Codiert ausgeben - also Text-kodiert - versagt Export-Certificate. Es ist allerdings einfach, das Zertifikat in seine Base64-kodierte Form zu bringen. Verwenden Sie hierfür die .Net-Klasse [Convert] und kodieren Sie die Eigenschaft .Raw des Zertifikatsobjekts:
$cert = Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object { $_.subject -eq "cn=NWCertRoot" }
$Base64Cert = [convert]::tobase64string(($Cert).RawData,'InsertLineBreaks')
Nun können Sie die Base64-Form direkt aus den Speicher z.B. auf eine Website hochladen - z.B., wenn Sie in Azure ein Point-to-Site VPN erstellen wollen - oder Sie können das Zertifikat in einer Datei speichern. Für die Speicherung in eine Datei müssen allerdings noch die beiden Codes "-----BEGIN CERTIFICATE-----" vor und "-----END CERTIFICATE-----" nach dem Code eingefügt werden:
@"
-----BEGIN CERTIFICATE-----
$Base64Cert
-----END CERTIFICATE-----
"@ | out-file c:\temp\Base64Cert.Cer -Encoding ascii
Links: