Zertifikat-Anbieter
Anbietername
Zertifikat
Laufwerke
Cert:
Funktionen
ShouldProcess
Kurze Beschreibung
Ermöglicht den Zugriff auf X.509-Zertifikatspeicher und -Zertifikate in PowerShell.
Detaillierte Beschreibung
Mit dem PowerShell-Zertifikatanbieter können Sie Zertifikate und Zertifikatspeicher in PowerShell abrufen, hinzufügen, ändern, löschen und löschen.
Das Zertifikatlaufwerk ist ein hierarchischer Namespace mit den Zertifikatspeichern und Zertifikaten auf Ihrem Computer.
Der Zertifikatanbieter unterstützt die folgenden Cmdlets, die in diesem Artikel behandelt werden.
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
Typen, die von diesem Anbieter verfügbar gemacht werden
Das Zertifikatlaufwerk macht die folgenden Typen verfügbar.
Speicherspeicherorte (Microsoft.PowerShell.Commands.X509StoreLocation), bei denen es sich um allgemeine Container handelt, die die Zertifikate für den aktuellen Benutzer und für alle Benutzer gruppieren. Jedes System verfügt über einen CurrentUser- und LocalMachine (alle Benutzer)-Speicherort.
Zertifikatespeicher (System.Security.Cryptography.X509Certificates.X509Store), bei denen es sich um physische Speicher handelt, in denen Zertifikate gespeichert und verwaltet werden.
X.509 System.Security.Cryptography.X509Certificates.X509Certificate2-Zertifikate , die jeweils ein X.509-Zertifikat auf dem Computer darstellen. Zertifikate werden durch ihre Fingerabdrücke identifiziert.
Navigieren auf dem Zertifikatlaufwerk
Der Zertifikatanbieter macht den Zertifikatnamespace als Cert:
Laufwerk in PowerShell verfügbar. Dieser Befehl verwendet den Set-Location
Befehl, um den aktuellen Speicherort in den Stammzertifikatspeicher im LocalMachine-Speicherspeicher zu ändern. Verwenden Sie einen umgekehrten Schrägstrich (\) oder einen Schrägstrich (/), um eine Ebene des Cert:
Laufwerks anzugeben.
Set-Location Cert:
Sie können auch von jedem anderen PowerShell-Laufwerk aus mit dem Zertifikatanbieter arbeiten. Um von einem anderen Speicherort aus auf einen Alias zu verweisen, verwenden Sie den Cert:
Laufwerksnamen im Pfad.
PS Cert:\> Set-Location -Path LocalMachine\Root
Um zu einem Dateisystemlaufwerk zurückzukehren, geben Sie den Namen des Laufwerks ein. Beispiel:
Set-Location C:
Hinweis
PowerShell verwendet Aliase, um Ihnen eine vertraute Methode zum Arbeiten mit Anbieterpfaden zu ermöglichen. Befehle wie dir
und ls
sind jetzt Aliase für Get-ChildItem, cd
ist ein Alias für Set-Location. und pwd
ist ein Alias für Get-Location.
Anzeigen des Inhalts des Laufwerks Cert:
Dem Cmdlet auf dem Cert:
Get-ChildItem
Laufwerk wurden die neuen dynamischen Parameter DnsName
, EKU
, SSLServerAuthentication
und ExpiringInDays
hinzugefügt. Die neuen dynamischen Parameter sind in den Windows PowerShell 3.0- und neueren PowerShell-Releases verfügbar. Die Anbieterparameter funktionieren mit IIS 8.0 auf Windows Server 2012 und höher.
Dieser Befehl verwendet das Get-ChildItem
Cmdlet, um die Zertifikatspeicher im CurrentUser-Zertifikatspeicherspeicher anzuzeigen.
Wenn Sie sich nicht im Cert:
Laufwerk befinden, verwenden Sie einen absoluten Pfad.
PS Cert:\CurrentUser\> Get-ChildItem
Anzeigen von Zertifikateigenschaften innerhalb des Laufwerks Cert:
In diesem Beispiel wird ein Zertifikat mit Get-Item
abgerufen und in einer Variablen gespeichert.
Das Beispiel zeigt die neuen Zertifikatskripteigenschaften (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) mit Select-Object
.
$c = Get-Item cert:\LocalMachine\My\52A149D0393CE8A8D4AF0B172ED667A9E3A1F44E
$c | Format-List DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer
DnsNameList : {SERVER01.contoso.com}
EnhancedKeyUsageList : {WiFi-Machine (1.3.6.1.4.1.311.42.2.6),
Client Authentication (1.3.6.1.5.5.7.3.2)}
SendAsTrustedIssuer : False
Suchen aller CodeSigning-Zertifikate
Dieser Befehl verwendet die Parameter CodeSigningCert und Recurse des Get-ChildItem
Cmdlets, um alle Zertifikate auf dem Computer abzurufen, die über eine Codesignaturberechtigung verfügen.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Suchen nach abgelaufenen Zertifikaten
Dieser Befehl verwendet den ExpiringInDays-Parameter des Get-ChildItem
Cmdlets, um Zertifikate abzurufen, die innerhalb der nächsten 30 Tage ablaufen.
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
Suchen nach Server-SSL-Zertifikaten
Dieser Befehl verwendet den SSLServerAuthentication-Parameter des Get-ChildItem
Cmdlets, um alle Server-SSL-Zertifikate in den Speicher My und WebHosting abzurufen.
Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
-SSLServerAuthentication
Suchen nach abgelaufenen Zertifikaten auf Remotecomputern
Dieser Befehl verwendet das Invoke-Command
Cmdlet, um einen Get-ChildItem
Befehl auf den Computern Srv01 und Srv02 auszuführen. Ein Wert von null (0) im Parameter ExpiringInDays ruft Zertifikate auf den Srv01- und Srv02-Computern ab, die abgelaufen sind.
Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
-Recurse -ExpiringInDays 0}
Kombinieren von Filtern, um einen bestimmten Satz von Zertifikaten zu finden
Mit diesem Befehl werden alle Zertifikate im LocalMachine-Speicherspeicher abgerufen, die die folgenden Attribute aufweisen:
- "fabrikam" in ihrem DNS-Namen
- "Clientauthentifizierung" in ihrer EKU
- ein Wert von
$true
für die SendAsTrustedIssuer-Eigenschaft - läuft nicht innerhalb der nächsten 30 Tage ab.
Die NotAfter-Eigenschaft speichert das Ablaufdatum des Zertifikats.
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
-EKU "*Client Authentication*" | Where-Object {
$_.SendAsTrustedIssuer -and `
$_.NotAfter -gt (get-date).AddDays.(30)
}
Öffnen des Zertifikate-MMC-Snap-Ins
Das Invoke-Item
Cmdlet verwendet die Standardanwendung, um einen von Ihnen angegebenen Pfad zu öffnen. Bei Zertifikaten ist die Standardanwendung das MMC-Snap-In Zertifikate.
Dieser Befehl öffnet das Zertifikate-MMC-Snap-In zum Verwalten des angegebenen Zertifikats.
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
Kopieren von Zertifikaten
Das Kopieren von Zertifikaten wird vom Zertifikatanbieter nicht unterstützt. Wenn Sie versuchen, ein Zertifikat zu kopieren, wird dieser Fehler angezeigt.
$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider does not support
this operation.
At line:1 char:1
+ Copy-Item -Path $path -Destination .\CA\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Copy-Item],
PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,
Microsoft.PowerShell.Commands.CopyItemCommand
Verschieben von Zertifikaten
Verschieben aller SSL Server-Authentifizierungszertifikate in den WebHosting-Speicher
Dieser Befehl verwendet das Move-Item
Cmdlet, um ein Zertifikat aus dem "Mein Speicher" in den WebHosting-Speicher zu verschieben.
Move-Item
werden keine Zertifikatspeicher verschoben, und es werden keine Zertifikate an einen anderen Speicherort verschoben, z. B. ein Zertifikat von LocalMachine zu CurrentUser. Das Move-Item
Cmdlet verschiebt Zertifikate, aber keine privaten Schlüssel.
Dieser Befehl verwendet den SSLServerAuthentication-Parameter des Get-ChildItem
Cmdlets, um SSL-Serverauthentifizierungszertifikate im MY-Zertifikatspeicher abzurufen.
Die zurückgegebenen Zertifikate werden an das Move-Item
Cmdlet weitergeleitet, wodurch die Zertifikate in den WebHosting-Speicher verschoben werden.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
-Destination cert:\LocalMachine\WebHosting
Löschen von Zertifikaten und privaten Schlüsseln
Das Remove-Item
Cmdlet entfernt die von Ihnen angegebenen Zertifikate. Der -DeleteKey
dynamische Parameter löscht den privaten Schlüssel.
Löschen eines Zertifikats aus dem Zertifizierungsstellenspeicher
Dieser Befehl löscht ein Zertifikat aus dem CA-Zertifikatspeicher, lässt jedoch den zugehörigen privaten Schlüssel intakt.
Auf dem Cert:
Laufwerk unterstützt das Remove-Item
Cmdlet nur die Parameter DeleteKey, Path, WhatIf und Confirm . Alle anderen Parameter werden ignoriert.
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
Löschen eines Zertifikats mithilfe eines Feldhalters im DNS-Namen
Dieser Befehl löscht alle Zertifikate, deren DNS-Name "Fabrikam" enthält. Es verwendet den DNSName-Parameter des Get-ChildItem
Cmdlets, um die Zertifikate und das Remove-Item
Cmdlet abzurufen, um sie zu löschen.
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
Löschen privater Schlüssel von einem Remotecomputer
Diese Reihe von Befehlen ermöglicht die Delegation und löscht dann das Zertifikat und den zugehörigen privaten Schlüssel auf einem Remotecomputer. Um einen privaten Schlüssel auf einem Remotecomputer zu löschen, müssen Sie die delegierten Anmeldeinformationen verwenden.
Verwenden Sie das Cmdlet, um die Enable-WSManCredSSP
CredSSP-Authentifizierung (Credential Security Service Provider) auf einem Client auf dem S1-Remotecomputer zu aktivieren.
CredSSP ermöglicht die delegierte Authentifizierung.
Enable-WSManCredSSP -Role Client -DelegateComputer S1
Verwenden Sie das Connect-WSMan
Cmdlet, um den S1-Computer mit dem WinRM-Dienst auf dem lokalen Computer zu verbinden. Wenn dieser Befehl abgeschlossen ist, wird der S1-Computer auf dem lokalen WSMan:
Laufwerk in PowerShell angezeigt.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Jetzt können Sie das Cmdlet Set-Item im Laufwerk WSMan: verwenden, um das CredSSP-Attribut für den WinRM-Dienst zu aktivieren.
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
Starten Sie eine Remotesitzung auf dem s1-Computer mithilfe des New-PSSession
Cmdlets, und geben Sie die CredSSP-Authentifizierung an. Speichert die Sitzung in der $s
Variablen.
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
Verwenden Sie schließlich das Invoke-Command
Cmdlet, um einen Remove-Item
Befehl in der Sitzung in der $s
Variablen auszuführen. Der Remove-Item
Befehl verwendet den DeleteKey-Parameter , um den privaten Schlüssel zusammen mit dem angegebenen Zertifikat zu entfernen.
Invoke-Command -Session $s { Remove-Item `
-Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
-DeleteKey
}
Löschen abgelaufener Zertifikate
Dieser Befehl verwendet den ExpiringInDays-Parameter des Cmdlets mit dem Get-ChildItem
Wert 0, um abgelaufene Zertifikate im WebHosting-Speicher abzurufen.
Die Variable, die die zurückgegebenen Zertifikate enthält, wird an das Remove-Item
Cmdlet weitergeleitet, das sie löscht. Der Befehl verwendet den DeleteKey-Parameter , um den privaten Schlüssel zusammen mit dem Zertifikat zu löschen.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Erstellen von Zertifikaten
Das New-Item
Cmdlet erstellt keine neuen Zertifikate im Zertifikatanbieter . Verwenden Sie das Cmdlet New-SelfSignedCertificate , um ein Zertifikat zu Testzwecken zu erstellen.
Erstellen von Zertifikatspeichern
Im Laufwerk Cert: erstellt das New-Item
Cmdlet Zertifikatspeicher im LocalMachine-Speicherspeicherort. Sie unterstützt die Parameter Name, Path, WhatIf und Confirm . Alle anderen Parameter werden ignoriert. Der Befehl gibt einen System.Security.Cryptography.X509Certificates.X509Store zurück, der den neuen Zertifikatspeicher darstellt.
Dieser Befehl erstellt einen neuen Zertifikatspeicher mit dem Namen "CustomStore" am Speicherort des LocalMachine-Speichers.
New-Item -Path cert:\LocalMachine\CustomStore
Create eines neuen Zertifikatspeichers auf einem Remotecomputer
Dieser Befehl erstellt einen neuen Zertifikatspeicher mit dem Namen "HostingStore" am LocalMachine-Speicherort auf dem Computer Server01.
Der Befehl verwendet das Invoke-Command
Cmdlet, um einen New-Item
Befehl auf dem Server01-Computer auszuführen. Der Befehl gibt einen System.Security.Cryptography.X509Certificates.X509Store zurück, der den neuen Zertifikatspeicher darstellt.
Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
-ComputerName Server01
Erstellen von Clientzertifikaten für WS-Man
Mit diesem Befehl wird der ClientCertificate-Eintrag erstellt, der vom WS-Management-Client verwendet werden kann. Das neue ClientCertificate wird im Verzeichnis ClientCertificate als "ClientCertificate_1234567890" angezeigt. Alle Parameter müssen angegeben werden. Der Aussteller muss ein Fingerabdruck des Ausstellerzertifikats sein.
$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
-Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
-URI wmicimv2/* -Credential $cred
Löschen von Zertifikatspeichern
Löschen eines Zertifikatspeichers von einem Remotecomputer
Dieser Befehl verwendet das Invoke-Command
Cmdlet, um einen Remove-Item
Befehl auf den Computern S1 und S2 auszuführen. Der Remove-Item
Befehl enthält den Recurse-Parameter , der die Zertifikate im Speicher löscht, bevor er den Speicher löscht.
Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
-ComputerName S1, S2
Dynamische Parameter
Dynamische Parameter sind Cmdlet-Parameter, die von einem PowerShell-Anbieter hinzugefügt werden und nur verfügbar sind, wenn das Cmdlet auf dem anbieterfähigen Laufwerk verwendet wird. Diese Parameter sind in allen Unterverzeichnissen des Zertifikatanbieters gültig, gelten jedoch nur für Zertifikate.
Hinweis
Parameter, die eine Filterung nach der EnhancedKeyUsageList
Eigenschaft durchführen, geben auch Elemente mit einem leeren EnhancedKeyUsageList
Eigenschaftswert zurück.
Zertifikate mit einer leeren EnhancedKeyUsageList können für alle Zwecke verwendet werden.
ItemType-Zeichenfolge <>
Mit diesem Parameter können Sie den Typ des von New-Item
erstellten Elements angeben.
In einem Certificate
Laufwerk sind die folgenden Werte zulässig:
- Zertifikat-Anbieter
- Zertifikat
- Speicher
- StoreLocation
Unterstützte Cmdlets
CodeSigningCert <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die "Code Signing" im EnhancedKeyUsageList-Eigenschaftswert aufweisen.
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die den angegebenen Domänennamen oder das angegebene Namensmuster in der DNSNameList-Eigenschaft des Zertifikats aufweisen. Der Wert dieses Parameters kann entweder "Unicode" oder "ASCII" sein. Punycode-Werte werden in Unicode konvertiert. Platzhalterzeichen (*) sind zulässig.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
EKU <System.String>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die den angegebenen Text oder das angegebene Textmuster in der EnhancedKeyUsageList
-Eigenschaft des Zertifikats aufweisen. Platzhalterzeichen (*) sind zulässig. Die EnhancedKeyUsageList
-Eigenschaft enthält den Anzeigenamen und die OID-Felder der EKU.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
ExpiringInDays <System.Int32>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die in oder vor der angegebenen Anzahl von Tagen ablaufen. Der Wert 0 (Null) ruft die Zertifikate ab, die abgelaufen sind.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Ruft nur die Serverzertifikate für SSL-Webhosting ab. Dieser Parameter ruft Zertifikate ab, deren EnhancedKeyUsageList
Eigenschaftswert "Serverauthentifizierung" enthält.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
DeleteKey <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Dieser Parameter löscht den zugeordneten privaten Schlüssel, wenn er das Zertifikat löscht.
Wichtig
Um einen privaten Schlüssel zu löschen, der Cert:\CurrentUser
einem Benutzerzertifikat im Speicher auf einem Remotecomputer zugeordnet ist, müssen Sie delegierte Anmeldeinformationen verwenden. Das Invoke-Command
Cmdlet unterstützt die Delegierung von Anmeldeinformationen mithilfe des CredSSP-Parameters . Sie sollten alle Sicherheitsrisiken berücksichtigen, bevor Sie die Invoke-Command
Delegierung von Anmeldeinformationen und verwendenRemove-Item
.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Skripteigenschaften
Dem x509Certificate2-Objekt , das die Zertifikate darstellt, wurden neue Skripteigenschaften hinzugefügt, um die Suche und Verwaltung der Zertifikate zu vereinfachen.
DnsNameList
: Um dieDnsNameList
Eigenschaft aufzufüllen, kopiert der Zertifikatanbieter den Inhalt aus dem DNSName-Eintrag in der Erweiterung SubjectAlternativeName (SAN). Wenn die SAN-Erweiterung leer ist, wird die Eigenschaft mit dem Inhalt aus dem Antragstellerfeld des Zertifikats aufgefüllt.EnhancedKeyUsageList
: Um dieEnhancedKeyUsageList
Eigenschaft aufzufüllen, kopiert der Zertifikatanbieter die OID-Eigenschaften des Felds EnhancedKeyUsage (EKU) im Zertifikat und erstellt einen Anzeigenamen dafür.SendAsTrustedIssuer
: Um dieSendAsTrustedIssuer
Eigenschaft aufzufüllen, kopiert der Zertifikatanbieter dieSendAsTrustedIssuer
Eigenschaft aus dem Zertifikat. Weitere Informationen finden Sie unter Verwaltung vertrauenswürdiger Aussteller für die Clientauthentifizierung.
Mit diesen neuen Funktionen können Sie die Zertifikate basierend auf ihren DNS-Namen und Ablaufdaten suchen und Zertifikate für Client- und Server-Authentifizierung durch den Wert der erweiterten Schlüsselverwendung (EKU)-Eigenschaften unterscheiden.
Verwenden der Pipeline
Anbieter-Cmdlets akzeptieren Pipelineeingaben. Sie können die Pipeline verwenden, um die Aufgabe zu vereinfachen, indem Sie Anbieterdaten von einem Cmdlet an ein anderes Anbieter-Cmdlet senden. Weitere Informationen zur Verwendung der Pipeline mit Anbieter-Cmdlets finden Sie in den Cmdlet-Verweisen in diesem Artikel.
Hilfe
Ab Windows PowerShell 3.0 können Sie benutzerdefinierte Hilfethemen für Anbieter-Cmdlets abrufen, die erläutern, wie sich diese Cmdlets in einem Dateisystemlaufwerk verhalten.
Um die Hilfethemen abzurufen, die für das Dateisystemlaufwerk angepasst sind, führen Sie einen Get-Help-Befehl in einem Dateisystemlaufwerk aus, oder verwenden Sie den -Path
Parameter von Get-Help , um ein Dateisystemlaufwerk anzugeben.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: