Delen via


about_Certificate_Provider

Providernaam

Certificaat

Aandrijfeenheden

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 in Windows.

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

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

Op het certificaatstation worden de volgende typen weergegeven.

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

De certificaatprovider stelt 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 opslaglocatie. 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 elk ander PowerShell-station. Als u wilt verwijzen naar een alias vanaf een andere locatie, gebruikt u de naam van het Cert: station 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, zodat u op een vertrouwde manier met providerpaden kunt 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 certificaatstation weergeven

Deze opdracht gebruikt de Get-ChildItem cmdlet om de certificaatarchieven weer te geven in 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 station Certificaat:

In dit voorbeeld wordt een certificaat met Get-Item opgeslagen en opgeslagen in een variabele. In het voorbeeld ziet u de nieuwe eigenschappen van certificaatscripts (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 de computer op te halen die de code-ondertekening hebben.

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

Met deze opdracht wordt de parameter SSLServerAuthentication van de Get-ChildItem cmdlet gebruikt om alle server-SSL-certificaten in de My en WebHosting op te halen.

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

Verlopen certificaten op externe computers zoeken

Deze opdracht gebruikt de Invoke-Command cmdlet om een Get-ChildItem opdracht uit te voeren op de computers Srv01 en Srv02. Met een waarde van nul (0) in de parameter ExpiringInDays worden certificaten opgehaald 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 in de LocalMachine opslaglocatie opgehaald die de volgende kenmerken hebben:

  • fabrikam in hun DNS-naam
  • Client Authentication in hun EKU
  • een waarde van $true voor 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 WebHosting-archief

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 van LocalMachine naar CurrentUser. Met de Move-Item cmdlet kunnen certificaten binnen een archief worden verplaatst, maar persoonlijke sleutels worden niet verplaatst.

Deze opdracht gebruikt de parameter SSLServerAuthentication van de Get-ChildItem cmdlet 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. De dynamische parameter DeleteKey verwijdert de persoonlijke sleutel.

Een certificaat verwijderen uit het CA-archief

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

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

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

Een certificaat verwijderen met behulp van een jokerteken in de DNS-naam

Met deze opdracht verwijdert u alle certificaten met een DNS-naam die bevat Fabrikam. Hierbij wordt de parameter DNSName van de Get-ChildItem cmdlet gebruikt om de certificaten op te halen en de Remove-Item cmdlet om ze te verwijderen.

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

Persoonlijke sleutels verwijderen van een externe computer

Deze reeks opdrachten maakt delegatie mogelijk en verwijdert vervolgens het certificaat en de bijbehorende persoonlijke sleutel op een externe computer. Als u een persoonlijke sleutel van 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

Nu kunt u de Set-Item cmdlet in het WSMan: station gebruiken om het kenmerk CredSSP 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

Met deze opdracht wordt de parameter ExpiringInDays van de Get-ChildItem cmdlet gebruikt met de waarde voor het ophalen van 0 certificaten in het WebHosting archief die zijn 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 in 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 in de LocalMachine opslaglocatie.

New-Item -Path cert:\LocalMachine\CustomStore

Creatie een nieuw certificaatarchief op een externe computer

Met deze opdracht maakt u een nieuw certificaatarchief met de naam HostingStore in de LocalMachine opslaglocatie 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 de vermelding ClientCertificate die kan worden gebruikt door de WS-Management-client . Het nieuwe ClientCertificate wordt onder de map ClientCertificate weergegeven als ClientCertificate_1234567890. Alle parameters zijn verplicht. De verlener moet een vingerafdruk zijn van het certificaat van de verlener.

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

Certificaatarchieven verwijderen

Een certificaatarchief van een externe computer verwijderen

Deze opdracht gebruikt de Invoke-Command cmdlet 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 die alleen beschikbaar zijn 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 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
  • ExpiringInDays
  • 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 parameter CredSSP . Houd rekening met eventuele beveiligingsrisico's voordat u met Invoke-Command en referentiedelegering gebruiktRemove-Item.

Deze parameter is opnieuw geïntroduceerd in PowerShell 7.1

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

Ondersteunde cmdlets

Deze parameter haalt certificaten op met de opgegeven domeinnaam of het opgegeven naampatroon in de eigenschap DNSNameList van het certificaat. De waarde van deze parameter kan of ASCIIzijnUnicode. 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

Deze parameter haalt certificaten op met de opgegeven tekst of het opgegeven 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 verlopen binnen of vóór het opgegeven aantal dagen. Een waarde van nul (0) krijgt certificaten 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 haalt u alleen servercertificaten voor SSL-webhosting op. 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 x509Certificate2-object dat de certificaten vertegenwoordigt, zodat u eenvoudig de certificaten kunt doorzoeken en beheren.

  • DnsNameList: om de eigenschap DnsNameList in te 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: om de eigenschap EnhancedKeyUsageList in te vullen, kopieert de certificaatprovider de OID-eigenschappen van het veld EnhancedKeyUsage (EKU) in het certificaat en maakt er een beschrijvende naam voor.
  • SendAsTrustedIssuer: om de eigenschap SendAsTrustedIssuer in 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 client- en serververificatiecertificaten onderscheiden op basis van de waarde van hun eigenschappen voor Uitgebreid sleutelgebruik (EKU).

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.

Ondersteuning vragen

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

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

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

Zie ook