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.
- 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 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 enLocalMachine
(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.
Navigeren op het certificaatstation
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-naamClient 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 ASCII
zijnUnicode
. 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: