about_Certificate_Provider
Anbietername
Zertifikat
Laufwerke
Cert:
Capabilities
ShouldProcess
Kurze Beschreibung
Bietet Zugriff auf X.509-Zertifikatspeicher und -zertifikate in PowerShell.
Detaillierte Beschreibung
Diese Informationen gelten nur für PowerShell, die unter Windows ausgeführt wird.
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, der die Zertifikatspeicher und Zertifikate auf Ihrem Computer enthält.
Der Zertifikatanbieter unterstützt die folgenden Cmdlets.
- 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.
- Microsoft.PowerShell.Commands.X509StoreLocation, bei denen es sich um übergeordnete Container handelt, die die Zertifikate für den aktuellen Benutzer und für alle Benutzer gruppieren. Jedes System verfügt über einen
CurrentUser
speicherort undLocalMachine
(alle Benutzer). - System.Security.Cryptography.X509Certificates.X509Store, die physische Speicher sind, in denen Zertifikate gespeichert und verwaltet werden.
- System.Security.Cryptography.X509Certificates.X509Certificate2, die jeweils ein X.509-Zertifikat auf dem Computer darstellen. Zertifikate werden durch ihre Fingerabdrucke identifiziert.
Navigieren im 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 Root
Zertifikatspeicher im LocalMachine
Speicherspeicherort 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 mit dem Zertifikatanbieter von jedem anderen PowerShell-Laufwerk aus arbeiten. Um auf einen Alias von einem anderen Speicherort zu verweisen, verwenden Sie den Cert:
Laufwerknamen 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, damit Sie mit Anbieterpfaden vertraut arbeiten können. Befehle wie dir
und sind jetzt Aliase für "Get-ChildItem", cd
ein Alias für "Set-Location" und pwd
ein Alias für "Get-Locationls
".
Anzeigen des Inhalts des Zertifikats: Laufwerk
Dieser Befehl verwendet das Get-ChildItem
Cmdlet, um die Zertifikatspeicher im CurrentUser
Zertifikatspeicherort anzuzeigen.
Wenn Sie sich nicht auf dem Cert:
Laufwerk befinden, verwenden Sie einen absoluten Pfad.
PS Cert:\CurrentUser\> Get-ChildItem
Anzeigen von Zertifikateigenschaften innerhalb des Zertifikats: Laufwerk
In diesem Beispiel wird ein Zertifikat mit Get-Item
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, auf dem die Codesignaturautorität vorhanden ist.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Suchen abgelaufener Zertifikate
Dieser Befehl verwendet den Parameter "ExpiringInDays" des Get-ChildItem
Cmdlets, um Zertifikate abzurufen, die innerhalb der nächsten 30 Tage ablaufen.
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
Server-SSL-Zertifikate suchen
Dieser Befehl verwendet den SSLServerAuthentication-Parameter des Get-ChildItem
Cmdlets, um alle Server-SSL-Zertifikate in den My
und WebHosting
Speichern abzurufen.
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
Suchen abgelaufener Zertifikate 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 Computern Srv01 und Srv02 ab, die abgelaufen sind.
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
Kombinieren von Filtern zum Auffinden einer bestimmten Gruppe von Zertifikaten
Dieser Befehl ruft alle Zertifikate am Speicherort ab, die LocalMachine
die folgenden Attribute aufweisen:
fabrikam
in ihrem DNS-NamenClient Authentication
in ihrer EKU- ein Wert für
$true
die SendAsTrustedIssuer-Eigenschaft - ablaufen Sie nicht innerhalb der nächsten 30 Tage.
Die NotAfter-Eigenschaft speichert das Ablaufdatum des Zertifikats.
[DateTime] $ValidThrough = (Get-Date) + (New-TimeSpan -Days 30)
$getChildItemSplat = @{
Path = 'cert:\*'
Recurse = $true
DnsName = "*fabrikam*"
Eku = "*Client Authentication*"
}
Get-ChildItem @getChildItemSplat |
Where-Object {$_.SendAsTrustedIssuer -and $_.NotAfter -gt $ValidThrough }
Öffnen des MMC-Snap-Ins "Zertifikate"
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".
Mit diesem Befehl wird das MMC-Snap-In "Zertifikate" geöffnet, um das angegebene Zertifikat zu verwalten.
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 doesn't 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 My
Speicher in den WebHosting
Speicher zu verschieben.
Move-Item
Zertifikatspeicher können nicht verschoben werden, und zertifikate können nicht an einen anderen Speicherort verschoben werden, z. B. das Verschieben eines Zertifikats von LocalMachine
zu CurrentUser
. Das Move-Item
Cmdlet kann Zertifikate innerhalb eines Speichers verschieben, private Schlüssel werden jedoch nicht verschoben.
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, das die Zertifikate in den WebHosting
Speicher verschiebt.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
Löschen von Zertifikaten und privaten Schlüsseln
Das Remove-Item
Cmdlet löscht von Ihnen angegebene Zertifikate. Der dynamische Parameter DeleteKey löscht den privaten Schlüssel.
Löschen eines Zertifikats aus dem Zertifizierungsstellenspeicher
Mit diesem Befehl wird ein Zertifikat aus dem Zertifikatspeicher der Zertifizierungsstelle gelöscht, der zugeordnete private Schlüssel bleibt jedoch erhalten.
Cert:
Im 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 von Wildcards im DNS-Namen
Mit diesem Befehl werden alle Zertifikate gelöscht, die einen DNS-Namen enthalten Fabrikam
. 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 Delegierung 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 delegierte Anmeldeinformationen verwenden.
Verwenden Sie das Enable-WSManCredSSP
Cmdlet, um die Credential Security Service Provider (CredSSP)-Authentifizierung auf einem Client auf dem S1-Remotecomputer zu aktivieren.
CredSSP erlaubt 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. Nach Abschluss dieses Befehls wird der S1-Computer auf dem lokalen WSMan:
Laufwerk in PowerShell angezeigt.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Jetzt können Sie das Set-Item
Cmdlet im WSMan:
Laufwerk 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 {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Abgelaufene Zertifikate löschen
Dieser Befehl verwendet den Parameter "ExpiringInDays" des Get-ChildItem
Cmdlets mit dem Wert zum Abrufen von 0
Zertifikaten im Speicher, der WebHosting
abgelaufen ist.
Die Variable, die die zurückgegebenen Zertifikate enthält, wird an das Remove-Item
Cmdlet weitergeleitet, das sie löscht. Der Befehl verwendet den Parameter DeleteKey , 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
Auf dem Cert:
Laufwerk erstellt das New-Item
Cmdlet Zertifikatspeicher am LocalMachine
Speicherort. Er 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.
Mit diesem Befehl wird ein neuer Zertifikatspeicher erstellt, der LocalMachine
am Speicherort benannt CustomStore
ist.
New-Item -Path cert:\LocalMachine\CustomStore
Erstellen eines neuen Zertifikatspeichers auf einem Remotecomputer
Mit diesem Befehl wird ein neuer Zertifikatspeicher erstellt, der LocalMachine
im Speicherort auf dem Server01-Computer benannt HostingStore
ist.
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 -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
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 unter dem Verzeichnis "ClientCertificate " als ClientCertificate_1234567890
. Alle Parameter sind obligatorisch. Der Aussteller muss den Fingerabdruck des Zertifikats des Ausstellers sein.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
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 -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
Dynamische Parameter
Dynamische Parameter sind Cmdlet-Parameter, die von einem PowerShell-Anbieter hinzugefügt werden und nur verfügbar sind, wenn das Cmdlet im vom Anbieter aktivierten Laufwerk verwendet wird. Diese Parameter sind in allen Unterverzeichnissen des Zertifikatanbieters gültig, sind jedoch nur für Zertifikate gültig.
Hinweis
Parameter, die eine Filterung für die EnhancedKeyUsageList-Eigenschaft ausführen, geben auch Elemente mit einem leeren EnhancedKeyUsageList-Eigenschaftswert zurück. Zertifikate mit einem leeren EnhancedKeyUsageList können für alle Zwecke verwendet werden.
Die folgenden Parameter des Zertifikatanbieters wurden in PowerShell 7.1 erneut eingeführt.
- DNSName
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die Code Signing
in ihrem EnhancedKeyUsageList-Eigenschaftswert enthalten sind.
DeleteKey <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Dieser Parameter löscht den zugeordneten privaten Schlüssel, wenn es 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 Delegierung von Invoke-Command
Anmeldeinformationen verwendenRemove-Item
.
Dieser Parameter wurde in PowerShell 7.1 erneut eingeführt.
DnsName Microsoft.PowerShell.Commands.DnsNameRepresentation <>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die über den angegebenen Domänennamen oder das angegebene Namensmuster in der DNSNameList-Eigenschaft des Zertifikats verfügen. Der Wert dieses Parameters kann entweder sein Unicode
oder ASCII
. Punycode-Werte werden in Unicode konvertiert. Wildcardzeichen (*
) sind zulässig.
Dieser Parameter wurde in PowerShell 7.1 erneut eingeführt.
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die Document Encryption
in ihrem EnhancedKeyUsageList-Eigenschaftswert enthalten sind.
EKU <System.String>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die das angegebene Text- oder Textmuster in der EnhancedKeyUsageList -Eigenschaft des Zertifikats aufweisen. Wildcardzeichen (*
) sind zulässig. Die EnhancedKeyUsageList-Eigenschaft enthält den Anzeigenamen und die OID-Felder der EKU.
Dieser Parameter wurde in PowerShell 7.1 erneut eingeführt.
ExpiringInDays <System.Int32>
Unterstützte Cmdlets
Dieser Parameter ruft Zertifikate ab, die in oder vor der angegebenen Anzahl von Tagen ablaufen. Ein Wert von Null (0) ruft Zertifikate ab, die abgelaufen sind.
Dieser Parameter wurde in PowerShell 7.1 erneut eingeführt.
ItemType <System.String>
Dieser Parameter wird verwendet, um den Typ des elements anzugeben, das von New-Item
. Das New-Item
Cmdlet unterstützt nur den Wert Store
. New-Item
Cmdlet kann keine neuen Zertifikate erstellen.
Unterstützte Cmdlets
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Unterstützte Cmdlets
Ruft nur die Serverzertifikate für SSL-Webhosting ab. Dieser Parameter ruft Zertifikate ab, die Server Authentication
in ihrem EnhancedKeyUsageList-Eigenschaftswert enthalten sind.
Dieser Parameter wurde in PowerShell 7.1 erneut eingeführt.
Skripteigenschaften
Dem x509Certificate2-Objekt wurden neue Skripteigenschaften hinzugefügt, die die Zertifikate darstellen, um das Durchsuchen und Verwalten der Zertifikate zu vereinfachen.
- DnsNameList: Um die DnsNameList-Eigenschaft aufzufüllen, kopiert der Zertifikatanbieter den Inhalt aus dem DNSName-Eintrag in der SubjectAlternativeName (SAN)-Erweiterung. Wenn die SAN-Erweiterung leer ist, wird die Eigenschaft mit dem Inhalt aus dem Antragstellerfeld des Zertifikats aufgefüllt.
- EnhancedKeyUsageList: Zum Auffüllen der EnhancedKeyUsageList-Eigenschaft kopiert der Zertifikatanbieter die OID-Eigenschaften des Felds EnhancedKeyUsage (EKU) im Zertifikat und erstellt einen Anzeigenamen dafür.
- SendAsTrustedIssuer: Zum Auffüllen der SendAsTrustedIssuer-Eigenschaft kopiert der Zertifikatanbieter die SendAsTrustedIssuer-Eigenschaft aus dem Zertifikat. Weitere Informationen finden Sie unter Verwaltung vertrauenswürdiger Aussteller für die Clientauthentifizierung.
Mit diesen neuen Features können Sie basierend auf ihren DNS-Namen und Ablaufdaten nach Zertifikaten suchen und Client- und Serverauthentifizierungszertifikate anhand des Werts ihrer EKU-Eigenschaften (Enhanced Key Usage) unterscheiden.
Verwenden der Pipeline
Anbieter-Cmdlets akzeptieren Pipelineeingaben. Sie können die Pipeline verwenden, um Aufgaben 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-Referenzen in diesem Artikel.
Hilfe
Ab 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 auf einem Dateisystemlaufwerk aus, oder verwenden Sie den -Path
Parameter zum Get-Help
Angeben eines Dateisystemlaufwerks.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: