憑證提供者
提供者名稱
憑證
磁碟機
Cert:
功能
ShouldProcess
簡短描述
提供在 PowerShell 中 x.509 憑證存放區和憑證的存取權。
詳細描述
PowerShell憑證提供者可讓您在 powershell 中取得、新增、變更、清除和刪除憑證和憑證存放區。
憑證磁片磁碟機是階層式命名空間,其中包含您電腦上的憑證存放區和憑證。
憑證提供者支援下列 Cmdlet,這會在本文中討論。
- 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
此提供者公開的類型
憑證磁片磁碟機會公開下列類型。
存放區位置(Microsoft.powershell.commands.x509storelocation),這是高階容器,可將目前使用者和所有使用者的憑證組成群組。 每個系統都有 CurrentUser 和 LocalMachine (所有使用者) 存放區位置。
憑證存放區(System.security.cryptography.x509certificates.x509certificate2. System.security.cryptography.x509certificates.x509store),這是用來儲存和管理憑證的實體存放區。
X.509 system.security.cryptography.x509certificates.x509certificate2. X509Certificate2憑證,其中每一個都代表電腦上的一個 x.509 憑證。 憑證是由其指紋來識別。
流覽憑證磁片磁碟機
憑證提供者會將憑證命名空間公開為 Cert:
PowerShell 中的磁片磁碟機。 此命令會使用 Set-Location
命令,將目前的位置變更為 LocalMachine 存放區位置中的根憑證存放區。 使用反斜線( \ )或斜線(/)來表示磁片磁碟機的層級 Cert:
。
Set-Location Cert:
您也可以從任何其他 PowerShell 磁片磁碟機使用憑證提供者。 若要參考另一個位置的別名,請 Cert:
在路徑中使用磁片磁碟機名稱。
PS Cert:\> Set-Location -Path LocalMachine\Root
若要返回檔案系統磁碟機,請輸入磁碟機名稱。 例如,輸入:
Set-Location C:
注意
PowerShell 會使用別名,讓您熟悉提供者路徑的使用方式。 命令(例如 dir
和) ls
現在是get-childitem的別名, cd
是設定位置的別名。 和 pwd
是「取得位置」的別名。
顯示 Cert:磁片磁碟機的內容
新的動態參數、、、 DnsName
EKU
和已 SSLServerAuthentication
ExpiringInDays
新增至 Get-ChildItem
磁片磁碟機中的 Cmdlet Cert:
。 Windows PowerShell 3.0 和更新版本的 PowerShell 版本中提供新的動態參數。 提供者參數可與 Windows Server 2012 和更新版本上的 IIS 8.0 搭配使用。
此命令會使用 Get-ChildItem
Cmdlet 來顯示 CurrentUser 憑證存放區位置中的憑證存放區。
如果您不在 Cert:
磁片磁碟機中,請使用絕對路徑。
PS Cert:\CurrentUser\> Get-ChildItem
在 Cert:磁片磁碟機中顯示憑證屬性
這個範例會取得具有的憑證 Get-Item
,並將它儲存在變數中。
此範例會使用來顯示新的憑證腳本屬性(DnsNameList、 EnhancedKeyUsageList、 SendAsTrustedIssuer) 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
尋找所有 CodeSigning 憑證
此命令會使用 Cmdlet 的CodeSigningCert和遞迴參數 Get-ChildItem
來取得電腦上具有程式碼簽署授權單位的所有憑證。
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
尋找過期的憑證
此命令會使用 Cmdlet 的ExpiringInDays參數 Get-ChildItem
來取得將在接下來的30天內過期的憑證。
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
尋找伺服器 SSL 憑證
此命令會使用 Cmdlet 的SSLServerAuthentication參數 Get-ChildItem
來取得 My 和 WebHosting 存放區中的所有伺服器 SSL 憑證。
Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting `
-SSLServerAuthentication
在遠端電腦上尋找過期的憑證
此命令會使用 Invoke-Command
Cmdlet 在 Get-ChildItem
Srv01 和 Srv02 電腦上執行命令。 ExpiringInDays參數中的值為零(0),會取得 Srv01 和 Srv02 電腦上已過期的憑證。
Invoke-Command -ComputerName Srv01, Srv02 {Get-ChildItem -Path cert:\* `
-Recurse -ExpiringInDays 0}
結合篩選來尋找一組特定的憑證
此命令會取得 LocalMachine 存放區位置中具有下列屬性的所有憑證:
- 其 DNS 名稱中的 "fabrikam"
- 其 EKU 中的「用戶端驗證」
$true
SendAsTrustedIssuer屬性的值- 不會在接下來的30天內過期。
NotAfter屬性會儲存憑證到期日。
Get-ChildItem -Path cert:\* -Recurse -DNSName "*fabrikam*" `
-EKU "*Client Authentication*" | Where-Object {
$_.SendAsTrustedIssuer -and `
$_.NotAfter -gt (get-date).AddDays.(30)
}
開啟憑證 MMC 嵌入式管理單元
此 Invoke-Item
Cmdlet 會使用預設應用程式來開啟您指定的路徑。 針對憑證,預設應用程式是 [憑證] MMC 嵌入式管理單元。
此命令會開啟 [憑證] MMC 嵌入式管理單元來管理指定的憑證。
Invoke-Item cert:\CurrentUser\my\6B8223358119BB08840DEE50FD8AF9EA776CE66B
複製憑證
憑證提供者不支援複製憑證。 當您嘗試複製憑證時,您會看到此錯誤。
$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
移動憑證
將所有 SSL 伺服器驗證憑證移至 WebHosting 存放區
此命令會使用 Move-Item
Cmdlet 將憑證從 My 存放區移到 WebHosting 存放區。
Move-Item
將不會移動憑證存放區,而且不會將憑證移至不同的存放區位置,例如將憑證從 LocalMachine 移至 CurrentUser。 Move-Item
Cmdlet 會移動憑證,但不會移動私密金鑰。
此命令會使用 Cmdlet 的SSLServerAuthentication參數 Get-ChildItem
來取得「我的」憑證存放區中的 SSL 伺服器驗證憑證。
傳回的憑證會以管道傳送至 Move-Item
Cmdlet,這會將憑證移至 WebHosting 存放區。
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
-Destination cert:\LocalMachine\WebHosting
刪除憑證和私密金鑰
此 Remove-Item
Cmdlet 會移除您指定的憑證。 -DeleteKey
動態參數會刪除私密金鑰。
從 CA 存放區刪除憑證
此命令會從 CA 憑證存放區刪除憑證,但會原封不動地保留相關聯的私密金鑰。
在 Cert:
磁片磁碟機中,此 Remove-Item
Cmdlet 僅支援DeleteKey、 Path、 WhatIf和Confirm參數。 會忽略所有其他參數。
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
使用 DNS 名稱中的萬用字元刪除憑證
此命令會刪除 DNS 名稱包含 "Fabrikam" 的所有憑證。 它會使用 Cmdlet 的DNSName參數 Get-ChildItem
來取得憑證和 Remove-Item
Cmdlet 來刪除它們。
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
從遠端電腦刪除私密金鑰
這一系列的命令會啟用委派,然後刪除遠端電腦上的憑證和相關聯的私密金鑰。 若要刪除遠端電腦上的私密金鑰,您必須使用委派的認證。
使用 Enable-WSManCredSSP
Cmdlet,在 S1 遠端電腦上的用戶端上啟用認證安全性服務提供者(CredSSP)驗證。
CredSSP 允許委派的驗證。
Enable-WSManCredSSP -Role Client -DelegateComputer S1
使用 Connect-WSMan
Cmdlet 將 S1 電腦連接到本機電腦上的 WinRM 服務。 當此命令完成時,S1 電腦會出現在 PowerShell 的本機 WSMan:
磁片磁碟機中。
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
現在,您可以在 WSMan:磁片磁碟機中使用 Set-Item Cmdlet,為 WinRM 服務啟用 CredSSP 屬性。
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
使用 Cmdlet 在 s1 電腦上啟動遠端會話 New-PSSession
,並指定 CredSSP 驗證。 將會話儲存在 $s
變數中。
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
最後,使用 Invoke-Command
Cmdlet 在 Remove-Item
變數的會話中執行命令 $s
。 此 Remove-Item
命令會使用DeleteKey參數來移除私密金鑰以及指定的憑證。
Invoke-Command -Session $s { Remove-Item `
-Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
-DeleteKey
}
刪除過期的憑證
此命令使用 Cmdlet 的ExpiringInDays參數 Get-ChildItem
,其值為0,以取得 WebHosting 存放區中已過期的憑證。
包含所傳回憑證的變數會以管道傳送至 Remove-Item
Cmdlet,這會將它們刪除。 此命令會使用DeleteKey參數來刪除私密金鑰以及憑證。
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
建立憑證
此 New-Item
Cmdlet 不會在憑證提供者中建立新的憑證。 使用SelfSignedCertificate Cmdlet 來建立用於測試的憑證。
建立憑證存放區
在 Cert:磁片磁碟機中,此 Cmdlet 會在 New-Item
LocalMachine 存放區位置中建立憑證存放區。 它支援Name、 Path、 WhatIf和Confirm參數。 會忽略所有其他參數。 此命令會傳回代表新憑證存放區的system.security.cryptography.x509certificates.x509certificate2. system.security.cryptography.x509certificates.x509store 。
此命令會在LocalMachine 存放區位置中建立名為 "CustomStore" 的新憑證存放區。
New-Item -Path cert:\LocalMachine\CustomStore
在遠端電腦上建立新的憑證存放區
此命令會在 Server01 電腦上的 LocalMachine 存放區位置中建立名為 "HostingStore" 的新憑證存放區。
命令會使用 Invoke-Command
Cmdlet 在 New-Item
Server01 電腦上執行命令。 此命令會傳回代表新憑證存放區的system.security.cryptography.x509certificates.x509certificate2. system.security.cryptography.x509certificates.x509store 。
Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
-ComputerName Server01
建立 WS-Man 的用戶端憑證
此命令會建立ws-management用戶端可以使用的ClientCertificate專案。 新的ClientCertificate會在ClientCertificate目錄底下顯示為「ClientCertificate_1234567890」。 所有的參數都是必要項。 簽發者必須是 issuer 憑證的指紋。
$cred = Get-Credential
New-Item -Path WSMan:\localhost\ClientCertificate `
-Issuer 1b3fd224d66c6413fe20d21e38b304226d192dfe `
-URI wmicimv2/* -Credential $cred
刪除憑證存放區
從遠端電腦刪除憑證存放區
此命令會使用 Invoke-Command
Cmdlet 在 Remove-Item
S1 和 S2 電腦上執行命令。 此 Remove-Item
命令包含遞迴參數,它會在刪除存放區之前先刪除存放區中的憑證。
Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
-ComputerName S1, S2
動態參數
動態參數是由 PowerShell 提供者新增的 Cmdlet 參數,只有在提供者啟用的磁片磁碟機中使用 Cmdlet 時才可使用。 這些參數在憑證提供者的所有子目錄中都是有效的,但只有在憑證上才有效。
注意
對屬性執行篩選的參數 EnhancedKeyUsageList
也會傳回具有空白 EnhancedKeyUsageList
屬性值的專案。
具有空白EnhancedKeyUsageList的憑證可用於所有目的。
ItemType<String>
這個參數可讓您指定所建立的專案類型 New-Item
。
在 Certificate
磁片磁碟機中,允許下列值:
- 憑證提供者
- 憑證
- 市集
- StoreLocation
支援的指令程式
CodeSigningCert <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會取得其EnhancedKeyUsageList屬性值中具有「程式碼簽署」的憑證。
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
支援的 Cmdlet
此參數會取得憑證的DNSNameList屬性中具有指定功能變數名稱或名稱模式的憑證。 此參數的值可以是 "Unicode" 或 "ASCII"。 Punycode 值會轉換為 Unicode。 允許使用萬用字元 (*)。
此參數是在 Windows PowerShell 3.0 引進。
EKU <System.String>
支援的 Cmdlet
此參數會取得憑證的屬性中具有指定文字或文字模式的憑證 EnhancedKeyUsageList
。 允許使用萬用字元 (*)。 EnhancedKeyUsageList
屬性包含 EKU 的易記名稱和 OID 欄位。
此參數是在 Windows PowerShell 3.0 引進。
ExpiringInDays <System.Int32>
支援的 Cmdlet
此參數會取得在指定天數內或之前過期的憑證。 值為 0 (零) 可取得已過期的憑證。
此參數是在 Windows PowerShell 3.0 引進。
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
只取得適用於 SSL 虛擬主機的伺服器憑證。 此參數會取得其屬性值中具有「伺服器驗證」的憑證 EnhancedKeyUsageList
。
此參數是在 Windows PowerShell 3.0 引進。
DeleteKey <System.Management.Automation.SwitchParameter>
支援的 Cmdlet
此參數會在刪除憑證時刪除相關聯的私密金鑰。
重要
若要刪除與遠端電腦存放區中的使用者憑證相關聯的私密金鑰 Cert:\CurrentUser
,您必須使用委派的認證。 Invoke-Command
Cmdlet 支援使用CredSSP參數來委派認證。 在使用搭配 Remove-Item
和認證委派之前,您應該考慮任何安全性風險 Invoke-Command
。
此參數是在 Windows PowerShell 3.0 引進。
腳本屬性
已將新的腳本屬性新增至代表憑證的x509Certificate2物件,讓您可以輕鬆地搜尋及管理憑證。
DnsNameList
:若要填入DnsNameList
屬性,憑證提供者會從 SubjectAlternativeName (SAN)延伸模組中的 DNSName 專案複製內容。 如果 SAN 延伸模組是空的,就會將憑證的 [主體] 欄位內容填入到屬性中。EnhancedKeyUsageList
:若要填入EnhancedKeyUsageList
屬性,憑證提供者會複製憑證中 [EnhancedKeyUsage (EKU)] 欄位的 OID 屬性,並為它建立易記名稱。SendAsTrustedIssuer
:若要填入SendAsTrustedIssuer
屬性,憑證提供者會SendAsTrustedIssuer
從憑證複製屬性。 如需詳細資訊,請參閱管理受信任簽發者以進行用戶端驗證。
這些新功能可讓您根據憑證的 DNS 名稱和到期日來搜尋它們,並透過它們的增強金鑰使用方法 (EKU) 屬性值來區分用戶端和伺服器驗證憑證。
使用管線
提供者 Cmdlet 接受管線輸入。 您可以使用管線,藉由將提供者資料從一個 Cmdlet 傳送到另一個提供者 Cmdlet 來簡化工作。 若要深入瞭解如何搭配提供者 Cmdlet 使用管線,請參閱本文中提供的 Cmdlet 參考。
取得說明
從 Windows PowerShell 3.0 開始,您可以取得提供者 Cmdlet 的自訂說明主題,這些主題說明這些 Cmdlet 在檔案系統磁碟機中的行為方式。
若要取得針對檔案系統磁片磁碟機自訂的說明主題,請在檔案系統磁片磁碟機中執行get-help命令,或使用 -Path
get-help的參數來指定檔案系統磁片磁碟機。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert: