about_Certificate_Provider
Providernamn
Certifikat
Drivrutiner
Cert:
Funktioner
ShouldProcess
Kort beskrivning
Ger åtkomst till X.509-certifikatarkiv och certifikat i PowerShell.
Detaljerad beskrivning
Med PowerShell-certifikatprovidern kan du hämta, lägga till, ändra, rensa och ta bort certifikat och certifikatarkiv i PowerShell.
Certifikatenheten är ett hierarkiskt namnområde som innehåller certifikatarkiven och certifikaten på datorn.
Certifikatprovidern stöder följande cmdletar.
- Hämta plats
- Ange plats
- Hämta objekt
- Get-ChildItem
- Anropa objekt
- Flytta objekt
- Nytt objekt
- Ta bort objekt
- Get-ItemProperty
- Set-ItemProperty
- Clear-ItemProperty
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
Typer som exponeras av den här providern
Certifikatenheten exponerar följande typer.
- Microsoft.PowerShell.Commands.X509StoreLocation, som är högnivåcontainrar som grupperar certifikaten för den aktuella användaren och för alla användare. Varje system har en
CurrentUser
ochLocalMachine
(alla användare) lagringsplats. - System.Security.Cryptography.X509Certificates.X509Store, som är fysiska lager där certifikat sparas och hanteras.
- System.Security.Cryptography.X509Certificates.X509Certificate2, som var och en representerar ett X.509-certifikat på datorn. Certifikat identifieras med tumavtryck.
Navigera på certifikatenheten
Certifikatprovidern exponerar certifikatnamnområdet som Cert:
enheten i PowerShell. Det här kommandot använder Set-Location
kommandot för att ändra den aktuella platsen till certifikatarkivet Root
på LocalMachine
lagringsplatsen. Använd ett omvänt snedstreck (\
) eller ett snedstreck (/
) för att ange enhetens Cert:
nivå.
Set-Location Cert:
Du kan också arbeta med certifikatprovidern från andra PowerShell-enheter. Om du vill referera till ett alias från en annan plats använder du Cert:
enhetsnamnet i sökvägen.
PS Cert:\> Set-Location -Path LocalMachine\Root
Om du vill återgå till en filsystemenhet skriver du enhetsnamnet. Skriv till exempel:
Set-Location C:
Kommentar
PowerShell använder alias för att ge dig ett välbekant sätt att arbeta med providersökvägar. Kommandon som dir
och ls
är nu alias för Get-ChildItem, cd
är ett alias för Set-Location och pwd
är ett alias för Get-Location.
Visa innehållet i certifikatenheten:
Det här kommandot använder cmdleten Get-ChildItem
för att visa certifikatarkivet på platsen för certifikatarkivet CurrentUser
.
Om du inte är i Cert:
enheten använder du en absolut sökväg.
PS Cert:\CurrentUser\> Get-ChildItem
Visa certifikategenskaper på enheten Cert:
Det här exemplet hämtar ett certifikat med Get-Item
och lagrar det i en variabel.
Exemplet visar de nya egenskaperna för certifikatskriptet (DnsNameList, EnhancedKeyUsageList, SendAsTrustedIssuer) med .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
Hitta alla CodeSigning-certifikat
Det här kommandot använder parametrarna CodeSigningCert och Recurse för cmdleten Get-ChildItem
för att hämta alla certifikat på datorn som har kodsigneringsutfärdare.
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
Hitta utgångna certifikat
Det här kommandot använder parametern ExpiringInDays för cmdleten Get-ChildItem
för att hämta certifikat som upphör att gälla inom de närmaste 30 dagarna.
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
Hitta server-SSL-certifikat
Det här kommandot använder parametern SSLServerAuthentication för cmdleten Get-ChildItem
för att hämta alla Server SSL-certifikat i och WebHosting
-arkivenMy
.
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
Hitta utgångna certifikat på fjärrdatorer
Det här kommandot använder cmdleten Invoke-Command
för att köra ett Get-ChildItem
kommando på datorerna Srv01 och Srv02. Värdet noll (0
) i parametern ExpiringInDays hämtar certifikat på de Srv01- och Srv02-datorer som har upphört att gälla.
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
Kombinera filter för att hitta en specifik uppsättning certifikat
Det här kommandot hämtar alla certifikat på lagringsplatsen LocalMachine
som har följande attribut:
fabrikam
i dns-namnetClient Authentication
i sin EKU$true
värdet för egenskapen SendAsTrustedIssuer- upphör inte att gälla inom de närmaste 30 dagarna.
Egenskapen NotAfter lagrar certifikatets förfallodatum.
[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 }
Öppna MMC-snapin-modulen certifikat
Cmdleten Invoke-Item
använder standardprogrammet för att öppna en sökväg som du anger. För certifikat är standardprogrammet MMC-snapin-modulen Certifikat.
Det här kommandot öppnar MMC-snapin-modulen Certifikat för att hantera det angivna certifikatet.
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
Kopiera certifikat
Kopiering av certifikat stöds inte av certifikatprovidern. När du försöker kopiera ett certifikat visas det här felet.
$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
Flytta certifikat
Flytta alla SSL Server-autentiseringscertifikat till WebHosting Store
Det här kommandot använder cmdleten Move-Item
för att flytta ett certifikat från arkivet My
till arkivet WebHosting
.
Move-Item
kan inte flytta certifikatarkiv och det kan inte flytta certifikat till en annan lagringsplats, till exempel flytta ett certifikat från LocalMachine
till CurrentUser
. Cmdleten Move-Item
kan flytta certifikat i ett arkiv, men den flyttar inte privata nycklar.
Det här kommandot använder parametern SSLServerAuthentication för cmdleten Get-ChildItem
för att hämta SSL-serverautentiseringscertifikat i certifikatarkivet My
.
De returnerade certifikaten skickas till cmdleten Move-Item
, som flyttar certifikaten till arkivet WebHosting
.
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
Ta bort certifikat och privata nycklar
Cmdleten Remove-Item
tar bort certifikat som du anger. Den dynamiska parametern DeleteKey tar bort den privata nyckeln.
Ta bort ett certifikat från CA-arkivet
Det här kommandot tar bort ett certifikat från CA-certifikatarkivet, men lämnar den associerade privata nyckeln intakt.
Cert:
På enheten stöder cmdleten Remove-Item
endast parametrarna DeleteKey, Path, WhatIf och Confirm. Alla andra parametrar ignoreras.
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
Ta bort ett certifikat med jokertecken i DNS-namnet
Det här kommandot tar bort alla certifikat som har ett DNS-namn som innehåller Fabrikam
. Den använder parametern DNSName för cmdleten Get-ChildItem
för att hämta certifikaten och cmdleten Remove-Item
för att ta bort dem.
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
Ta bort privata nycklar från en fjärrdator
Den här serien med kommandon aktiverar delegering och tar sedan bort certifikatet och den associerade privata nyckeln på en fjärrdator. Om du vill ta bort en privat nyckel på en fjärrdator måste du använda delegerade autentiseringsuppgifter.
Använd cmdleten Enable-WSManCredSSP
för att aktivera CredSSP-autentisering (CredSSP) på en klient på S1-fjärrdatorn.
CredSSP tillåter delegerad autentisering.
Enable-WSManCredSSP -Role Client -DelegateComputer S1
Använd cmdleten Connect-WSMan
för att ansluta S1-datorn till WinRM-tjänsten på den lokala datorn. När det här kommandot har slutförts visas S1-datorn på den lokala WSMan:
enheten i PowerShell.
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
Nu kan du använda cmdleten Set-Item
WSMan:
på enheten för att aktivera CredSSP-attributet för WinRM-tjänsten.
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
Starta en fjärrsession på S1-datorn med hjälp av cmdleten New-PSSession
och ange CredSSP-autentisering. Sparar sessionen i variabeln $s
.
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
Använd slutligen cmdleten Invoke-Command
för att köra ett Remove-Item
kommando i sessionen i variabeln $s
. Kommandot Remove-Item
använder parametern DeleteKey för att ta bort den privata nyckeln tillsammans med det angivna certifikatet.
Invoke-Command -Session $s {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
Ta bort utgångna certifikat
Det här kommandot använder parametern ExpiringInDays för cmdleten Get-ChildItem
med värdet 0
för för att hämta certifikat i arkivet WebHosting
som har upphört att gälla.
Variabeln som innehåller de returnerade certifikaten skickas till cmdleten Remove-Item
, som tar bort dem. Kommandot använder parametern DeleteKey för att ta bort den privata nyckeln tillsammans med certifikatet.
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
Skapa certifikat
Cmdleten New-Item
skapar inte nya certifikat i certifikatprovidern. Använd cmdleten New-SelfSignedCertificate för att skapa ett certifikat i testsyfte.
Skapa certifikatarkiv
Cert:
På enheten skapar cmdleten New-Item
certifikatarkiv på LocalMachine
lagringsplatsen. Den stöder parametrarna Namn, Sökväg, WhatIf och Bekräfta. Alla andra parametrar ignoreras. Kommandot returnerar ett System.Security.Cryptography.X509Certificates.X509Store som representerar det nya certifikatarkivet.
Det här kommandot skapar ett nytt certifikatarkiv med namnet CustomStore
på LocalMachine
lagringsplatsen.
New-Item -Path cert:\LocalMachine\CustomStore
Skapa ett nytt certifikatarkiv på en fjärrdator
Det här kommandot skapar ett nytt certifikatarkiv med namnet HostingStore
på LocalMachine
lagringsplatsen på Server01-datorn.
Kommandot använder cmdleten Invoke-Command
för att köra ett New-Item
kommando på Server01-datorn. Kommandot returnerar ett System.Security.Cryptography.X509Certificates.X509Store som representerar det nya certifikatarkivet.
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
Skapa klientcertifikat för WS-Man
Det här kommandot skapar ClientCertificate-post som kan användas av WS-Management-klienten . Den nya ClientCertificate visas under katalogen ClientCertificate som ClientCertificate_1234567890
. Alla parametrar är obligatoriska. Utfärdaren måste vara tumavtryck för utfärdarens certifikat.
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
Ta bort certifikatarkiv
Ta bort ett certifikatarkiv från en fjärrdator
Det här kommandot använder cmdleten Invoke-Command
för att köra ett Remove-Item
kommando på S1- och S2-datorerna. Kommandot Remove-Item
innehåller parametern Recurse , som tar bort certifikaten i arkivet innan det tar bort arkivet.
Invoke-Command -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
Dynamiska parametrar
Dynamiska parametrar är cmdlet-parametrar som läggs till av en PowerShell-provider och är endast tillgängliga när cmdleten används på den provideraktiverade enheten. Dessa parametrar är giltiga i alla underkataloger för certifikatprovidern , men gäller endast för certifikat.
Kommentar
Parametrar som utför filtrering mot egenskapen EnhancedKeyUsageList returnerar också objekt med ett tomt egenskapsvärde för EnhancedKeyUsageList . Certifikat som har en tom EnhancedKeyUsageList kan användas för alla ändamål.
Följande parametrar för certifikatprovidern återinfördes i PowerShell 7.1.
- DNSName
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
Cmdletar stöds
Den här parametern hämtar certifikat som har Code Signing
egenskapsvärdet EnhancedKeyUsageList .
DeleteKey <System.Management.Automation.SwitchParameter>
Cmdletar stöds
Den här parametern tar bort den associerade privata nyckeln när certifikatet tas bort.
Viktigt!
Om du vill ta bort en privat nyckel som är associerad med ett användarcertifikat i arkivet Cert:\CurrentUser
på en fjärrdator måste du använda delegerade autentiseringsuppgifter. Cmdleten Invoke-Command
stöder delegering av autentiseringsuppgifter med hjälp av parametern CredSSP . Du bör överväga eventuella säkerhetsrisker innan du använder Remove-Item
med Invoke-Command
och delegering av autentiseringsuppgifter.
Den här parametern introducerades i PowerShell 3.0.
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
Cmdletar stöds
Den här parametern hämtar certifikat som har det angivna domännamnet eller namnmönstret i egenskapen DNSNameList för certifikatet. Värdet för den här parametern kan vara Unicode
eller ASCII
. Punycode-värden konverteras till Unicode. Jokertecken (*
) tillåts.
Den här parametern introducerades i PowerShell 3.0.
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
Cmdletar stöds
Den här parametern hämtar certifikat som har Document Encryption
egenskapsvärdet EnhancedKeyUsageList .
EKU <System.String>
Cmdletar stöds
Den här parametern hämtar certifikat som har det angivna text- eller textmönstret i egenskapen EnhancedKeyUsageList för certifikatet. Jokertecken (*
) tillåts. Egenskapen EnhancedKeyUsageList innehåller det egna namnet och OID-fälten i EKU:n.
Den här parametern introducerades i PowerShell 3.0.
ExpiringInDays <System.Int32>
Cmdletar stöds
Den här parametern hämtar certifikat som upphör att gälla under eller före det angivna antalet dagar. Värdet noll (0) hämtar certifikat som har upphört att gälla.
Den här parametern återinfördes i PowerShell 7.1
ItemType <System.String>
Den här parametern används för att ange vilken typ av objekt som skapas av New-Item
. Cmdleten New-Item
stöder endast värdet Store
. New-Item
cmdlet kan inte skapa nya certifikat.
Cmdletar stöds
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
Cmdletar stöds
Hämtar endast servercertifikat för SSL-webbvärd. Den här parametern hämtar certifikat som har Server Authentication
egenskapsvärdet EnhancedKeyUsageList .
Den här parametern introducerades i PowerShell 3.0.
Skriptegenskaper
Nya skriptegenskaper har lagts till i objektet x509Certificate2 som representerar certifikaten för att göra det enkelt att söka efter och hantera certifikaten.
- DnsNameList: För att fylla i egenskapen DnsNameList kopierar certifikatprovidern innehållet från DNSName-posten i TILLÄGGET SubjectAlternativeName (SAN). Om SAN-tillägget är tomt fylls egenskapen i med innehåll från certifikatets ämnesfält.
- EnhancedKeyUsageList: Om du vill fylla i egenskapen EnhancedKeyUsageList kopierar certifikatprovidern OID-egenskaperna för fältet EnhancedKeyUsage (EKU) i certifikatet och skapar ett eget namn för det.
- SendAsTrustedIssuer: För att fylla i egenskapen SendAsTrustedIssuer kopierar certifikatprovidern egenskapen SendAsTrustedIssuer från certifikatet. Mer information finns i Hantering av betrodda utfärdare för klientautentisering.
Med de här nya funktionerna kan du söka efter certifikat baserat på deras DNS-namn och förfallodatum och särskilja klient- och serverautentiseringscertifikat med värdet för deras EKU-egenskaper (Enhanced Key Usage).
Använda pipelinen
Provider-cmdletar accepterar pipelineindata. Du kan använda pipelinen för att förenkla uppgifter genom att skicka providerdata från en cmdlet till en annan provider-cmdlet. Mer information om hur du använder pipelinen med provider-cmdletar finns i cmdlet-referenserna i den här artikeln.
Få hjälp
Från och med PowerShell 3.0 kan du få anpassade hjälpavsnitt för provider-cmdletar som förklarar hur dessa cmdletar beter sig på en filsystemenhet.
Om du vill få hjälpavsnitt som är anpassade för filsystemenheten kör du ett Get-Help-kommando på en filsystemenhet eller använder parametern -Path
Get-Help
för för att ange en filsystemenhet.
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: