Delen via


about_Certificate_Provider

Providernaam

Certificaat

Stations

Cert:

Functies

ShouldProcess

Korte beschrijving

Biedt toegang tot X.509-certificaatarchieven en certificaten in PowerShell.

Gedetailleerde beschrijving

Deze informatie is alleen van toepassing op PowerShell die wordt uitgevoerd in Windows.

Met de PowerShell-certificaatprovider kunt u certificaten en certificaatarchieven in PowerShell ophalen, toevoegen, wijzigen, wissen en verwijderen.

Het certificaatstation is een hiërarchische naamruimte met de certificaatarchieven en certificaten op uw computer.

De certificaatprovider ondersteunt de volgende cmdlets.

Typen die door deze provider worden weergegeven

Het certificaatstation bevat de volgende typen.

  • Microsoft.PowerShell.Commands.X509StoreLocation, dat containers op hoog niveau zijn die de certificaten groeperen voor de huidige gebruiker en voor alle gebruikers. Elk systeem heeft een CurrentUser en LocalMachine (alle gebruikers) opslaglocatie.
  • System.Security.Cryptography.X509Certificates.X509Store, dat fysieke archieven zijn waarin certificaten worden opgeslagen en beheerd.
  • System.Security.Cryptography.X509Certificates.X509Certificate2, die elk een X.509-certificaat op de computer vertegenwoordigen. Certificaten worden geïdentificeerd met hun vingerafdrukken.

De certificaatprovider maakt de certificaatnaamruimte beschikbaar als het Cert: station in PowerShell. Met deze opdracht wordt de Set-Location opdracht gebruikt om de huidige locatie te wijzigen in het Root certificaatarchief in de LocalMachine archieflocatie. Gebruik een backslash (\) of een slash (/) om een niveau van het Cert: station aan te geven.

Set-Location Cert:

U kunt ook met de certificaatprovider werken vanaf een ander PowerShell-station. Als u wilt verwijzen naar een alias vanaf een andere locatie, gebruikt u de Cert: stationsnaam in het pad.

PS Cert:\> Set-Location -Path LocalMachine\Root

Als u wilt terugkeren naar een bestandssysteemstation, typt u de naam van het station. Typ bijvoorbeeld:

Set-Location C:

Notitie

PowerShell maakt gebruik van aliassen om u een vertrouwde manier te bieden om met providerpaden te werken. Opdrachten zoals dir en ls zijn nu aliassen voor Get-ChildItem, cd is een alias voor Set-Location en pwd is een alias voor Get-Location.

De inhoud van het certificaat weergeven: station

Met deze opdracht wordt de Get-ChildItem cmdlet gebruikt om de certificaatarchieven weer te geven op de locatie van het CurrentUser certificaatarchief.

Als u zich niet in het Cert: station bevindt, gebruikt u een absoluut pad.

PS Cert:\CurrentUser\> Get-ChildItem

Certificaateigenschappen weergeven in het certificaat: station

In dit voorbeeld wordt een certificaat met Get-Item een variabele opgeslagen en opgeslagen. In het voorbeeld ziet u de nieuwe eigenschappen van het certificaatscript (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) met behulp van 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

Alle CodeSigning-certificaten zoeken

Met deze opdracht worden de parameters CodeSigningCert en Recurse van de Get-ChildItem cmdlet gebruikt om alle certificaten op te halen op de computer met een instantie voor ondertekening van programmacode.

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

Verlopen certificaten zoeken

Deze opdracht maakt gebruik van de parameter ExpiringInDays van de Get-ChildItem cmdlet om certificaten op te halen die binnen de komende 30 dagen verlopen.

Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30

SERVER-SSL-certificaten zoeken

Deze opdracht maakt gebruik van de parameter SSLServerAuthentication van de Get-ChildItem cmdlet om alle Server SSL-certificaten op te halen in de My en WebHosting op te slaan.

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

Verlopen certificaten zoeken op externe computers

Met deze opdracht wordt de Invoke-Command cmdlet gebruikt om een Get-ChildItem opdracht uit te voeren op de Srv01- en Srv02-computers. Een waarde van nul (0) in de parameter ExpiringInDays haalt certificaten op op de Srv01- en Srv02-computers die zijn verlopen.

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

Filters combineren om een specifieke set certificaten te vinden

Met deze opdracht worden alle certificaten opgehaald in de LocalMachine opslaglocatie met de volgende kenmerken:

  • fabrikam in hun DNS-naam
  • Client Authentication in hun EKU
  • een waarde van $true de eigenschap SendAsTrustedIssuer
  • verloopt niet binnen de komende 30 dagen.

De eigenschap NotAfter slaat de vervaldatum van het certificaat op.

[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 }

De MMC-module Certificaten openen

De Invoke-Item cmdlet gebruikt de standaardtoepassing om een pad te openen dat u opgeeft. Voor certificaten is de standaardtoepassing de MMC-module Certificaten.

Met deze opdracht opent u de MMC-module Certificaten om het opgegeven certificaat te beheren.

Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B

Certificaten kopiëren

Het kopiëren van certificaten wordt niet ondersteund door de certificaatprovider . Wanneer u probeert een certificaat te kopiëren, ziet u deze fout.

$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

Certificaten verplaatsen

Alle SSL Server-verificatiecertificaten verplaatsen naar het webhostingarchief

Met deze opdracht wordt de Move-Item cmdlet gebruikt om een certificaat van het My archief naar het WebHosting archief te verplaatsen.

Move-Item kan certificaatarchieven niet verplaatsen en kan certificaten niet verplaatsen naar een andere opslaglocatie, zoals het verplaatsen van een certificaat naar LocalMachine CurrentUser. De Move-Item cmdlet kan certificaten in een archief verplaatsen, maar er worden geen persoonlijke sleutels verplaatst.

Met deze opdracht wordt de parameter SSLServerAuthentication van de Get-ChildItem cmdlet gebruikt om SSL-serververificatiecertificaten op te halen in het My certificaatarchief.

De geretourneerde certificaten worden doorgesluisd naar de Move-Item cmdlet, waardoor de certificaten naar het WebHosting archief worden verplaatst.

Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
    Move-Item -Destination cert:\LocalMachine\WebHosting

Certificaten en persoonlijke sleutels verwijderen

De Remove-Item cmdlet verwijdert certificaten die u opgeeft. Met de dynamische parameter DeleteKey wordt de persoonlijke sleutel verwijderd.

Een certificaat verwijderen uit het CA-archief

Met deze opdracht wordt een certificaat uit het CA-certificaatarchief verwijderd, maar blijft de bijbehorende persoonlijke sleutel intact.

In het Cert: station ondersteunt de Remove-Item cmdlet alleen de parameters DeleteKey, Path, WhatIf en Confirm . Alle andere parameters worden genegeerd.

Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0

Een certificaat verwijderen met behulp van jokertekens in de DNS-naam

Met deze opdracht worden alle certificaten verwijderd die een DNS-naam bevatten Fabrikam. De parameter DNSName van de Get-ChildItem cmdlet wordt gebruikt om de certificaten en de Remove-Item cmdlet op te halen om ze te verwijderen.

Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item

Persoonlijke sleutels van een externe computer verwijderen

Met deze reeks opdrachten kunt u delegering inschakelen en vervolgens het certificaat en de bijbehorende persoonlijke sleutel op een externe computer verwijderen. Als u een persoonlijke sleutel op een externe computer wilt verwijderen, moet u gedelegeerde referenties gebruiken.

Gebruik de Enable-WSManCredSSP cmdlet om CredSSP-verificatie (Credential Security Service Provider) in te schakelen op een client op de externe S1-computer. CredSSP staat gedelegeerde verificatie toe.

Enable-WSManCredSSP -Role Client -DelegateComputer S1

Gebruik de Connect-WSMan cmdlet om de S1-computer te verbinden met de WinRM-service op de lokale computer. Wanneer deze opdracht is voltooid, wordt de S1-computer weergegeven op het lokale WSMan: station in PowerShell.

Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01

U kunt nu de Set-Item cmdlet in het WSMan: station gebruiken om het CredSSP-kenmerk in te schakelen voor de WinRM-service.

Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true

Start een externe sessie op de S1-computer met behulp van de New-PSSession cmdlet en geef CredSSP-verificatie op. Slaat de sessie op in de $s variabele.

$s  = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01

Gebruik ten slotte de Invoke-Command cmdlet om een Remove-Item opdracht uit te voeren in de sessie in de $s variabele. De Remove-Item opdracht gebruikt de parameter DeleteKey om de persoonlijke sleutel samen met het opgegeven certificaat te verwijderen.

Invoke-Command -Session $s {
    $removeItemSplat = @{
        Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
        DeleteKey = $true
    }
    Remove-Item @removeItemSplat
}

Verlopen certificaten verwijderen

Deze opdracht maakt gebruik van de parameter ExpiringInDays van de Get-ChildItem cmdlet met de waarde 0 om certificaten op te halen in het WebHosting archief dat is verlopen.

De variabele met de geretourneerde certificaten wordt doorgesluisd naar de Remove-Item cmdlet, waardoor ze worden verwijderd. De opdracht gebruikt de parameter DeleteKey om de persoonlijke sleutel samen met het certificaat te verwijderen.

$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey

Certificaten maken

De New-Item cmdlet maakt geen nieuwe certificaten in de certificaatprovider . Gebruik de cmdlet New-SelfSignedCertificate om een certificaat te maken voor testdoeleinden.

Certificaatarchieven maken

In het Cert: station maakt de New-Item cmdlet certificaatarchieven op de LocalMachine opslaglocatie. Het ondersteunt de parameters Name, Path, WhatIf en Confirm . Alle andere parameters worden genegeerd. De opdracht retourneert een System.Security.Cryptography.X509Certificates.X509Store die het nieuwe certificaatarchief vertegenwoordigt.

Met deze opdracht maakt u een nieuw certificaatarchief met de naam CustomStore op de LocalMachine opslaglocatie.

New-Item -Path cert:\LocalMachine\CustomStore

Een nieuw certificaatarchief maken op een externe computer

Met deze opdracht maakt u een nieuw certificaatarchief met de naam HostingStore in de LocalMachine archieflocatie op de Server01-computer.

De opdracht gebruikt de Invoke-Command cmdlet om een New-Item opdracht uit te voeren op de Server01-computer. De opdracht retourneert een System.Security.Cryptography.X509Certificates.X509Store die het nieuwe certificaatarchief vertegenwoordigt.

Invoke-Command -ComputerName Server01 -ScriptBlock {
    New-Item -Path cert:\LocalMachine\CustomStore
}

Clientcertificaten maken voor WS-Man

Met deze opdracht maakt u ClientCertificate-vermelding die kan worden gebruikt door de WS-Management-client . Het nieuwe ClientCertificate wordt weergegeven onder de map ClientCertificate als ClientCertificate_1234567890. Alle parameters zijn verplicht. De uitgever moet een vingerafdruk van het certificaat van de uitgever zijn.

$newItemSplat = @{
    Path = 'WSMan:\localhost\ClientCertificate'
    Credential = Get-Credential
    Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
    URI = 'wmicimv2/*'
}
New-Item @newItemSplat

Certificaatarchieven verwijderen

Een certificaatarchief van een externe computer verwijderen

Met deze opdracht wordt de Invoke-Command cmdlet gebruikt om een Remove-Item opdracht uit te voeren op de S1- en S2-computers. De Remove-Item opdracht bevat de parameter Recurse , waarmee de certificaten in het archief worden verwijderd voordat het archief wordt verwijderd.

Invoke-Command -ComputerName S1, S2 -ScriptBlock {
    Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}

Dynamische parameters

Dynamische parameters zijn cmdlet-parameters die worden toegevoegd door een PowerShell-provider en zijn alleen beschikbaar wanneer de cmdlet wordt gebruikt in het station met provider. Deze parameters zijn geldig in alle submappen van de certificaatprovider , maar zijn alleen van kracht op certificaten.

Notitie

Parameters die filteren uitvoeren op de eigenschap EnhancedKeyUsageList retourneren ook items met een lege eigenschapswaarde EnhancedKeyUsageList . Certificaten met een lege EnhancedKeyUsageList kunnen voor alle doeleinden worden gebruikt.

De volgende certificaatproviderparameters zijn opnieuw geïntroduceerd in PowerShell 7.1.

  • DNS-naam
  • DocumentEncryptionCert
  • EKU
  • VerlopenInDays
  • SSLServerAuthentication

CodeSigningCert <System.Management.Automation.SwitchParameter>

Ondersteunde cmdlets

Met deze parameter worden certificaten opgehaald die de eigenschapswaarde EnhancedKeyUsageList hebbenCode Signing.

DeleteKey <System.Management.Automation.SwitchParameter>

Ondersteunde cmdlets

Met deze parameter wordt de bijbehorende persoonlijke sleutel verwijderd wanneer het certificaat wordt verwijderd.

Belangrijk

Als u een persoonlijke sleutel wilt verwijderen die is gekoppeld aan een gebruikerscertificaat in het Cert:\CurrentUser archief op een externe computer, moet u gedelegeerde referenties gebruiken. De Invoke-Command cmdlet ondersteunt referentiedelegering met behulp van de CredSSP-parameter . U moet rekening houden met eventuele beveiligingsrisico's voordat u deze gebruikt Remove-Item met Invoke-Command en referentiedelegering.

Deze parameter is opnieuw geïntroduceerd in PowerShell 7.1

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

Ondersteunde cmdlets

Met deze parameter worden certificaten met het opgegeven domeinnaam- of naampatroon ophaalt in de eigenschap DNSNameList van het certificaat. De waarde van deze parameter kan of Unicode ASCII. Punycode-waarden worden geconverteerd naar Unicode. Jokertekens (*) zijn toegestaan.

Deze parameter is opnieuw geïntroduceerd in PowerShell 7.1

DocumentEncryptionCert <System.Management.Automation.SwitchParameter>

Ondersteunde cmdlets

Met deze parameter worden certificaten opgehaald die de eigenschapswaarde EnhancedKeyUsageList hebbenDocument Encryption.

EKU <System.String>

Ondersteunde cmdlets

Met deze parameter worden certificaten opgehaald met het opgegeven tekst- of tekstpatroon in de eigenschap EnhancedKeyUsageList van het certificaat. Jokertekens (*) zijn toegestaan. De eigenschap EnhancedKeyUsageList bevat de beschrijvende naam en de OID-velden van de EKU.

Deze parameter is opnieuw geïntroduceerd in PowerShell 7.1

ExpiringInDays <System.Int32>

Ondersteunde cmdlets

Deze parameter haalt certificaten op die binnen of vóór het opgegeven aantal dagen verlopen. Een waarde van nul (0) haalt certificaten op die zijn verlopen.

Deze parameter is opnieuw geïntroduceerd in PowerShell 7.1

ItemType <System.String>

Deze parameter wordt gebruikt om het type item op te geven dat is gemaakt door New-Item. De New-Item cmdlet ondersteunt alleen de waarde Store. New-Item cmdlet kan geen nieuwe certificaten maken.

Ondersteunde cmdlets

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

Ondersteunde cmdlets

Hiermee worden alleen servercertificaten voor SSL-webhosting ophaalt. Met deze parameter worden certificaten opgehaald die de eigenschapswaarde EnhancedKeyUsageList hebbenServer Authentication.

Deze parameter is opnieuw geïntroduceerd in PowerShell 7.1

Scripteigenschappen

Er zijn nieuwe scripteigenschappen toegevoegd aan het object x509Certificate2 dat de certificaten vertegenwoordigt, zodat u eenvoudig de certificaten kunt doorzoeken en beheren.

  • DnsNameList: Als u de eigenschap DnsNameList wilt vullen, kopieert de certificaatprovider de inhoud van de DNSName-vermelding in de SAN-extensie (SubjectAlternativeName). Als de SAN-extensie leeg is, wordt de eigenschap gevuld met inhoud uit het veld Onderwerp van het certificaat.
  • EnhancedKeyUsageList: Als u de eigenschap EnhancedKeyUsageList wilt vullen, kopieert de certificaatprovider de OID-eigenschappen van het veld EnhancedKeyUsage (EKU) in het certificaat en maakt u er een beschrijvende naam voor.
  • SendAsTrustedIssuer: Om de eigenschap SendAsTrustedIssuer te vullen, kopieert de certificaatprovider de eigenschap SendAsTrustedIssuer van het certificaat. Zie Beheer van vertrouwde verleners voor clientverificatie voor meer informatie.

Met deze nieuwe functies kunt u zoeken naar certificaten op basis van hun DNS-namen en vervaldatums en kunt u client- en serververificatiecertificaten onderscheiden op basis van de waarde van hun EKU-eigenschappen (Enhanced Key Usage).

De pijplijn gebruiken

Provider-cmdlets accepteren pijplijninvoer. U kunt de pijplijn gebruiken om taken te vereenvoudigen door providergegevens van de ene cmdlet naar een andere provider-cmdlet te verzenden. Zie de cmdlet-verwijzingen in dit artikel voor meer informatie over het gebruik van de pijplijn met provider-cmdlets.

Hulp krijgen

Vanaf PowerShell 3.0 kunt u aangepaste Help-onderwerpen krijgen voor provider-cmdlets die uitleggen hoe deze cmdlets zich gedragen in een bestandssysteemstation.

Als u de Help-onderwerpen wilt ophalen die zijn aangepast voor het bestandssysteemstation, voert u een Get-Help-opdracht uit op een bestandssysteemstation of gebruikt u de parameter voor het -Path opgeven van Get-Help een bestandssysteemstation.

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:

Zie ook