Certificaatprovider
Providernaam
Certificaat
Aandrijfeenheden
Cert:
Functies
ShouldProcess
Korte beschrijving
Biedt toegang tot X.509-certificaatarchieven en certificaten in PowerShell.
Gedetailleerde beschrijving
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 cerificaatarchieven en certificaten op uw computer.
De certificaatprovider ondersteunt de volgende cmdlets, die in dit artikel worden behandeld.
- 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
Het certificaatstation maakt de volgende typen beschikbaar.
Opslaglocaties (Microsoft.PowerShell.Commands.X509StoreLocation), die containers op hoog niveau zijn die de certificaten voor de huidige gebruiker en voor alle gebruikers groeperen. Elk systeem heeft een opslaglocatie voor CurrentUser en LocalMachine (alle gebruikers).
Certificatenarchieven (System.Security.Cryptography.X509Certificates.X509Store), dit zijn fysieke archieven waarin certificaten worden opgeslagen en beheerd.
X.509 System.Security.Cryptography.X509Certificates.X509Certificate2-certificaten , die elk een X.509-certificaat op de computer vertegenwoordigen. Certificaten worden aangeduid met hun vingerafdrukken.
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 basiscertificaatarchief in de opslaglocatie LocalMachine. 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 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 station Certificaat weergeven
Nieuwe dynamische parameters, DnsName
, EKU
, SSLServerAuthentication
en ExpiringInDays
zijn toegevoegd aan de Get-ChildItem
cmdlet in het Cert:
station. De nieuwe dynamische parameters zijn beschikbaar in de Windows PowerShell 3.0 en nieuwere PowerShell-releases. De providerparameters werken met IIS 8.0 op Windows Server 2012 en hoger.
Met deze opdracht wordt de Get-ChildItem
cmdlet gebruikt om de certificaatarchieven weer te geven in de locatie van het certificaatarchief CurrentUser.
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 eigenschappen van het nieuwe 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 de computer op te halen die de machtiging voor het ondertekenen van programmacode hebben.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Verlopen certificaten zoeken
Deze opdracht gebruikt 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 op te halen in de winkels Mijn en WebHosting.
Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
-SSLServerAuthentication
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.
Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
-Recurse -ExpiringInDays 0}
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
- 'Clientverificatie' in hun EKU
- een waarde van
$true
voor de eigenschap SendAsTrustedIssuer - verlopen niet binnen de komende 30 dagen.
De eigenschap NotAfter slaat de vervaldatum van het certificaat op.
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
-EKU "*Client Authentication*" | Where-Object {
$_.SendAsTrustedIssuer -and `
$_.NotAfter -gt (get-date).AddDays.(30)
}
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 een certificaat probeert te kopiëren, wordt deze fout weergegeven.
$path = "Cert:\LocalMachine\Root\E2C0F6662D3C569705B4B31FE2CBF3434094B254"
PS Cert:\LocalMachine\> Copy-Item -Path $path -Destination .\CA\
Copy-Item : Provider operation stopped because the provider does not 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 te verplaatsen van mijn archief naar het archief WebHosting.
Move-Item
hiermee worden certificaatarchieven niet verplaatst en worden certificaten niet verplaatst naar een andere opslaglocatie, zoals het verplaatsen van een certificaat van LocalMachine naar CurrentUser. Met de Move-Item
cmdlet worden certificaten verplaatst, maar persoonlijke sleutels worden niet verplaatst.
Met deze opdracht wordt de parameter SSLServerAuthentication van de Get-ChildItem
cmdlet gebruikt om SSL-serververificatiecertificaten op te halen in het certificaatarchief MY.
De geretourneerde certificaten worden doorgesluisd naar de Move-Item
cmdlet, waardoor de certificaten naar het webhostingarchief worden verplaatst.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
-Destination cert:\LocalMachine\WebHosting
Certificaten en persoonlijke sleutels verwijderen
De Remove-Item
cmdlet verwijdert de certificaten die u opgeeft. De -DeleteKey
dynamische parameter verwijdert de persoonlijke sleutel.
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 een jokerteken in de DNS-naam
Met deze opdracht verwijdert u alle certificaten met een DNS-naam die 'Fabrikam' bevat. De parameter DNSName van de Get-ChildItem
cmdlet wordt 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 van een externe computer verwijderen
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 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
Nu kunt u de cmdlet Set-Item in het station WSMan: 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 { Remove-Item `
-Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
-DeleteKey
}
Verlopen certificaten verwijderen
Deze opdracht gebruikt de parameter ExpiringInDays van de Get-ChildItem
cmdlet met de waarde 0 om certificaten op te halen 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 station Certificaat: maakt de New-Item
cmdlet certificaatarchieven in de locatie van het LocalMachine-archief. 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 locatie van het LocalMachine-archief.
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 { New-Item -Path cert:\LocalMachine\CustomStore } `
-ComputerName Server01
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.
$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
-Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
-URI wmicimv2/* -Credential $cred
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 { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
-ComputerName S1, S2
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 EnhancedKeyUsageList
eigenschap retourneren ook items met een lege EnhancedKeyUsageList
eigenschapswaarde.
Certificaten met een lege EnhancedKeyUsageList kunnen voor alle doeleinden worden gebruikt.
ItemType-tekenreeks <>
Met deze parameter kunt u het type item opgeven dat door New-Item
is gemaakt.
In een Certificate
station zijn de volgende waarden toegestaan:
- Certificaatprovider
- Certificaat
- Opslaan
- StoreLocation
Ondersteunde cmdlets
CodeSigningCert <System.Management.Automation.SwitchParameter>
Ondersteunde cmdlets
Met deze parameter worden certificaten opgehaald met 'Code-ondertekening' in de eigenschapswaarde EnhancedKeyUsageList .
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 'Unicode' of 'ASCII' zijn. Punycode-waarden worden geconverteerd naar Unicode. Jokertekens (*) zijn toegestaan.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
EKU <System.String>
Ondersteunde cmdlets
Deze parameter haalt certificaten op met de opgegeven tekst of het tekstpatroon in de EnhancedKeyUsageList
eigenschap van het certificaat. Jokertekens (*) zijn toegestaan. De EnhancedKeyUsageList
eigenschap bevat de beschrijvende naam en de OID-velden van de EKU.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
ExpiringInDays <System.Int32>
Ondersteunde cmdlets
Deze parameter haalt certificaten op die verlopen binnen of vóór het opgegeven aantal dagen. Met de waarde 0 (nul) worden certificaten opgehaald die zijn verlopen.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Ondersteunde cmdlets
Hiermee haalt u alleen servercertificaten voor SSL-webhosting op. Met deze parameter worden certificaten opgehaald met 'Serververificatie' in hun EnhancedKeyUsageList
eigenschapswaarde.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
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 geïntroduceerd in Windows PowerShell 3.0.
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 deDnsNameList
eigenschap 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 deEnhancedKeyUsageList
eigenschap 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 deSendAsTrustedIssuer
eigenschap in te vullen, kopieert de certificaatprovider deSendAsTrustedIssuer
eigenschap 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 de taak 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 Windows 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 Get-Help om een bestandssysteemstation op te geven.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: