Freigeben über


about_Certificate_Provider

Anbietername

Zertifikat

Laufwerke

Cert:

Funktionen

ShouldProcess

Kurze Beschreibung

Ermöglicht den 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.

Typen, die von diesem Anbieter verfügbar gemacht werden

Das Zertifikatlaufwerk macht die folgenden Typen verfügbar.

  • Microsoft.PowerShell.Commands.X509StoreLocation: Allgemeine Container, die die Zertifikate für den aktuellen Benutzer und alle Benutzer gruppieren. Jedes System verfügt über einen CurrentUser Speicherspeicherort und LocalMachine (alle Benutzer).
  • System.Security.Cryptography.X509Certificates.X509Store, das sind physische Speicher, 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 Fingerabdrücke identifiziert.

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 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 ein Alias für Get-Location.

Anzeigen des Inhalts des Laufwerks Cert:

Dieser Befehl verwendet das Get-ChildItem Cmdlet, um die Zertifikatspeicher im Speicherort des CurrentUser Zertifikatspeichers 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 My - und WebHosting -Speicher abzurufen.

$getChildItemSplat = @{
    Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
    SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat

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.

$invokeCommandSplat = @{
    ComputerName = 'Srv01', 'Srv02'
    ScriptBlock = {
        Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
    }
}
Invoke-Command @invokeCommandSplat

Kombinieren von Filtern, um einen bestimmten Satz von Zertifikaten zu finden

Mit diesem Befehl werden alle Zertifikate im Speicherspeicherort abgerufen, die LocalMachine die folgenden Attribute aufweisen:

  • fabrikam in ihrem DNS-Namen
  • Client Authentication 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.

[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 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 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 kann keine Zertifikatspeicher verschieben und Zertifikate können nicht an einen anderen Speicherort verschoben werden, z. B. ein Zertifikat von LocalMachine zu verschieben CurrentUser. Das Move-Item Cmdlet kann Zertifikate innerhalb eines Speichers verschieben, 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 löscht die von Ihnen angegebenen Zertifikate. Der dynamische Parameter DeleteKey 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

Mit diesem Befehl werden alle Zertifikate gelöscht, die über einen DNS-Namen verfügen, der enthält 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 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 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
}

Löschen abgelaufener Zertifikate

Dieser Befehl verwendet den ExpiringInDays-Parameter des Cmdlets mit dem Get-ChildItem Wert von 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

Auf dem Cert: Laufwerk erstellt das New-Item Cmdlet Zertifikatspeicher am LocalMachine Speicherort. 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 namens CustomStore am LocalMachine Speicherort.

New-Item -Path cert:\LocalMachine\CustomStore

Create eines neuen Zertifikatspeichers auf einem Remotecomputer

Mit diesem Befehl wird ein neuer Zertifikatspeicher namens HostingStore am LocalMachine Speicherort auf dem Computer Server01 erstellt.

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_1234567890angezeigt. Alle Parameter sind obligatorisch. Der Aussteller muss ein 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 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 ausführen, geben auch Elemente mit einem leeren EnhancedKeyUsageList-Eigenschaftswert zurück. Zertifikate mit einer leeren EnhancedKeyUsageList können für alle Zwecke verwendet werden.

Die folgenden Zertifikatanbieterparameter wurden in PowerShell 7.1 wieder eingeführt.

  • DNSName
  • DocumentEncryptionCert
  • EKU
  • ExpiringInDays
  • SSLServerAuthentication

CodeSigningCert <System.Management.Automation.SwitchParameter>

Unterstützte Cmdlets

Dieser Parameter ruft Zertifikate ab, die im EnhancedKeyUsageList-Eigenschaftswert enthalten Code Signing sind.

DeleteKey <System.Management.Automation.SwitchParameter>

Unterstützte Cmdlets

Dieser Parameter löscht den zugeordneten privaten Schlüssel, wenn er das Zertifikat löscht.

Wichtig

Zum Löschen eines privaten Schlüssels, der einem Benutzerzertifikat im Speicher auf Cert:\CurrentUser 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 PowerShell 7.1 wieder eingeführt.

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 oder ASCIIseinUnicode. Punycode-Werte werden in Unicode konvertiert. Wildcardzeichen (*) sind zulässig.

Dieser Parameter wurde in PowerShell 7.1 wieder eingeführt.

DocumentEncryptionCert <System.Management.Automation.SwitchParameter>

Unterstützte Cmdlets

Dieser Parameter ruft Zertifikate ab, die im EnhancedKeyUsageList-Eigenschaftswert enthalten Document Encryption 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 wieder 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 null (0) ruft abgelaufene Zertifikate ab.

Dieser Parameter wurde in PowerShell 7.1 wieder eingeführt.

ItemType <System.String>

Dieser Parameter wird verwendet, um den Typ des von New-Itemerstellten Elements anzugeben. Das New-Item Cmdlet unterstützt nur den Wert Store. New-Item Das 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 im EnhancedKeyUsageList-Eigenschaftswert enthalten Server Authentication sind.

Dieser Parameter wurde in PowerShell 7.1 wieder 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 die DnsNameList-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 die EnhancedKeyUsageList-Eigenschaft aufzufüllen, kopiert der Zertifikatanbieter die OID-Eigenschaften des Felds EnhancedKeyUsage (EKU) im Zertifikat und erstellt einen Anzeigenamen dafür.
  • SendAsTrustedIssuer: Um die SendAsTrustedIssuer-Eigenschaft aufzufüllen , 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 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 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-Verweisen in diesem Artikel.

Hilfe

Ab PowerShell 3.0 können Sie benutzerdefinierte Hilfethemen für Anbieter-Cmdlets erhalten, in denen erläutert wird, 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:

Weitere Informationen