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.
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Item aanroepen
- Item verplaatsen
- Nieuw item
- Item verwijderen
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
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
enLocalMachine
(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.
Navigeren door het certificaatstation
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-naamClient 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: