Dela via


Certifikatprovider

Providernamn

Certifikat

Enheter

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, 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 lagringsplatsen CurrentUser och LocalMachine (alla användare).

  • Certifikat lagrar (System.Security.Cryptography.X509Certificates.X509Store), som är fysiska arkiv där certifikat sparas och hanteras.

  • X.509 System.Security.Cryptography.X509Certificates.X509Certificate2-certifikat , som var och en representerar ett X.509-certifikat på datorn. Certifikat identifieras med tumavtryck.

Certifikatprovidern exponerar certifikatets namnområde som Cert: enheten i PowerShell. Det här kommandot använder Set-Location kommandot för att ändra den aktuella platsen till rotcertifikatarkivet på platsen för LocalMachine-arkivet. 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 är cd ett alias för Set-Location. och pwd är ett alias för Get-Location.

Visa innehållet i certifikatenheten:

Nya dynamiska parametrar, DnsName, EKU, SSLServerAuthenticationoch ExpiringInDays har lagts till Get-ChildItem i cmdleten Cert: i enheten. De nya dynamiska parametrarna är tillgängliga i Windows PowerShell 3.0 och senare PowerShell-versioner. Providerparametrarna fungerar med IIS 8.0 på Windows Server 2012 och senare.

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

Om du inte är i Cert: enheten använder du en absolut sökväg.

PS Cert:\CurrentUser\> Get-ChildItem

Visa certifikategenskaper i certifikatenheten:

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 SSL-servercertifikat i arkiven My och WebHosting.

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å platsen för LocalMachine-arkivet som har följande attribut:

  • "fabrikam" i dns-namnet
  • "Klientautentisering" 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.

Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
  -EKU "*Client Authentication*" | Where-Object {
                                     $_.SendAsTrustedIssuer -and `
                                     $_.NotAfter -gt (get-date).AddDays.(30)
                                   }

Ö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 Store

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

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 MY-certifikatarkivet.

De returnerade certifikaten skickas till cmdleten Move-Item , som flyttar certifikaten till WebHosting-arkivet.

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 -DeleteKey dynamiska parametern 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 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 i WSMan:-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 att hämta certifikat i WebHosting-arkivet 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

På enheten Cert: skapar cmdleten New-Item certifikatarkiv på platsen för LocalMachine-arkivet. 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å platsen för LocalMachine-arkivet.

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å platsen för LocalMachine-arkivet 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 . Det nya ClientCertificate visas under katalogen ClientCertificate som "ClientCertificate_1234567890". Alla parametrar är obligatoriska. Utfärdaren måste vara tumavtryck för utfärdarcertifikatet.

$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 i certifikatprovidern, men gäller endast för certifikat.

Anteckning

Parametrar som utför filtrering mot EnhancedKeyUsageList egenskapen returnerar också objekt med ett tomt EnhancedKeyUsageList egenskapsvärde. Certifikat som har en tom EnhancedKeyUsageList kan användas för alla ändamål.

ItemType-sträng <>

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:

  • Certifikatprovider
  • Certifikat
  • Lagringsplats
  • Lagringsplats

Cmdletar som stöds

CodeSigningCert <System.Management.Automation.SwitchParameter>

Cmdletar stöds

Den här parametern hämtar certifikat som har "Kodsignering" i egenskapsvärdet EnhancedKeyUsageList .

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 antingen vara "Unicode" eller "ASCII". Punycode-värden konverteras till Unicode. Jokertecken (*) tillåts.

Den här parametern introducerades i Windows PowerShell 3.0.

EKU <System.String>

Cmdletar stöds

Den här parametern hämtar certifikat som har det angivna text- eller textmönstret i EnhancedKeyUsageList certifikatets egenskap. Jokertecken (*) tillåts. Egenskapen EnhancedKeyUsageList innehåller det egna namnet och OID-fälten i EKU:n.

Den här parametern introducerades i Windows PowerShell 3.0.

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 0 (noll) hämtar certifikat som har upphört att gälla.

Den här parametern introducerades i Windows PowerShell 3.0.

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

Den här parametern introducerades i Windows PowerShell 3.0.

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 Windows PowerShell 3.0.

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: För att fylla i DnsNameList egenskapen kopierar certifikatprovidern innehållet från POSTEN DNSName i TILLÄGGET SubjectAlternativeName (SAN). Om SAN-tillägget är tomt fylls egenskapen i med innehåll från certifikatets ämnesfält.

  • EnhancedKeyUsageList: För att fylla i EnhancedKeyUsageList egenskapen 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 SendAsTrustedIssuer egenskapen kopierar certifikatprovidern SendAsTrustedIssuer egenskapen 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 uppgiften 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 Windows 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 kommandot Get-Help på en filsystemenhet eller använder parametern -PathGet-Help för att ange en filsystemenhet.

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

Se även

about_Providers

about_Signing

Get-AuthenticodeSignature

Set-AuthenticodeSignature

Get-PfxCertificate