about_Certificate_Provider

Providernamn

Certifikat

Enheter

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, som beskrivs i den här artikeln.

Typer som exponeras av den här providern

Certifikatenheten visar följande typer.

  • Lagra platser (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 lagringsplats för och LocalMachine (alla användare).
  • Certifikatarkiv (System.Security.Cryptography.X509Certificates.X509Store), som är fysiska arkiv där certifikat sparas och hanteras.
  • X.509 System.Security.Cryptography.X509Certificates.X509Certificate2-certifikat som vart och ett representerar ett X.509-certifikat på datorn. Certifikat identifieras med sina 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 på lagringsplatsen. Använd ett omvänt snedstreck (\) eller ett snedstreck (/) för att ange en nivå på Cert: enheten.

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 namnet på enheten. Skriv till exempel:

Set-Location C:

Anteckning

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 på enheten Cert:

Det här kommandot använder cmdleten Get-ChildItem för att visa certifikatarkivet CurrentUser på certifikatarkivplatsen.

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 SSL-certifikat för server

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.

Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
  -SSLServerAuthentication

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.

Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
  -Recurse -ExpiringInDays 0}

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 sitt DNS-namn
  • Client Authentication i sin EKU
  • värdet $true 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)
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
  -EKU "*Client Authentication*" | 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 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

Flytta certifikat

Flytta alla SSL Server-autentiseringscertifikat till WebHosting-arkivet

Det här kommandot använder cmdleten Move-Item för att flytta ett certifikat från arkivet My till arkivet WebHosting .

Move-Item flyttar inte certifikatarkiv och flyttar inte certifikat till en annan lagringsplats, till exempel flytta ett certifikat från LocalMachine till CurrentUser. Cmdleten Move-Item flyttar certifikat, 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: I 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 möjliggör 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 (Credential Security Service Provider) 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 { Remove-Item `
  -Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
  -DeleteKey
  }

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 Name, Path, WhatIf och Confirm . 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 { New-Item -Path cert:\LocalMachine\CustomStore } `
  -ComputerName Server01

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 av utfärdarens certifikat.

$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
         -Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
         -URI wmicimv2/* -Credential $cred

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 { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
  -ComputerName S1, S2

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.

Anteckning

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 certifikatproviderparametrar å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 i 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 i 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 i 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>

Med den här parametern kan du ange vilken typ av objekt som skapas av New-Item.

I en Certificate enhet tillåts följande värden:

  • Certificate Provider
  • Certificate
  • Store
  • StoreLocation

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 i egenskapsvärdet EnhancedKeyUsageList .

Den här parametern återinfördes i PowerShell 7.1

Skriptegenskaper

Nya skriptegenskaper har lagts till i x509Certificate2-objektet som representerar certifikaten för att göra det enkelt att söka efter och hantera certifikaten.

  • DnsNameList: Om du vill 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 egenskaper för förbättrad nyckelanvändning (EKU).

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 hämta hjälpavsnitten som är anpassade för filsystemenheten kör du kommandot Get-Help 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