about_Certificate_Provider

Providernamn

Certifikat

Drivrutiner

Cert:

Funktioner

ShouldProcess

Kort beskrivning

Ger åtkomst till X.509-certifikatarkiv och certifikat i PowerShell.

Detaljerad beskrivning

Den här informationen gäller endast för PowerShell som körs i Windows.

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.

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 och LocalMachine (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.

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 RootLocalMachine 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-namnet
  • Client 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-ItemWSMan: 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 CustomStoreLocalMachine 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 HostingStoreLocalMachine 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 återinfördes i PowerShell 7.1

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 återinfördes i PowerShell 7.1

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 återinfördes i PowerShell 7.1

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 återinfördes i PowerShell 7.1

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 -PathGet-Help för för att ange en filsystemenhet.

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

Se även