about_Certificate_Provider
プロバイダー名
証明書
ドライブ
Cert:
機能
ShouldProcess
簡単な説明
PowerShell の X.509 証明書ストアと証明書へのアクセスを提供します。
詳しい説明
この情報は、Windows で実行されている PowerShell にのみ適用されます。
PowerShell 証明書プロバイダーを使用すると、PowerShell で証明書と証明書ストアを取得、追加、変更、クリア、および削除できます。
証明書ドライブは、コンピューター上の証明書ストアと証明書を含む階層型名前空間です。
証明書プロバイダーは、次のコマンドレットをサポートしています。
- 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.X509Store。証明書が保存および管理される物理ストアです。
- System.Security.Cryptography.X509Certificates.X509Certificate2。コンピューター上の X.509 証明書をそれぞれ表します。 証明書は拇印によって識別されます。
証明書ドライブの移動
証明書プロバイダーは、PowerShell で証明書名前空間をCert:
ドライブとして公開します。 このコマンドは、このコマンドを Set-Location
使用して、現在の場所をストアの Root
場所の証明書ストアに LocalMachine
変更します。 ドライブのレベルを示すには、円記号 (\
) またはスラッシュ (/
) を Cert:
使用します。
Set-Location Cert:
他の PowerShell ドライブから証明書プロバイダーを操作することもできます。 別の場所からエイリアスを参照するには、パスで Cert:
ドライブ名を使用します。
PS Cert:\> Set-Location -Path LocalMachine\Root
ファイル システム ドライブに戻るには、ドライブ名を入力します。 たとえば、次のように入力します。
Set-Location C:
Note
PowerShell ではエイリアスを使用して、プロバイダー パスを使い慣れた方法で操作できます。 Get-ChildItem のエイリアス、dir
ls
Set-Location のエイリアス、 cd
Get-Locationpwd
のエイリアスなどのコマンドです。
Cert: ドライブの内容の表示
このコマンドは、コマンドレットを Get-ChildItem
使用して、証明書ストアの場所に証明書ストアを 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 証明書を検索する
このコマンドは、コマンドレットの CodeSigningCert パラメーターと Recurse パラメーターを Get-ChildItem
使用して、コード署名機関を持つコンピューター上のすべての証明書を取得します。
Get-ChildItem -Path cert: -CodeSigningCert -Recurse
期限切れの証明書を検索する
このコマンドでは、コマンドレットの ExpiringInDays パラメーターを Get-ChildItem
使用して、今後 30 日以内に有効期限が切れる証明書を取得します。
Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30
サーバー SSL 証明書の検索
このコマンドは、コマンドレットの SSLServerAuthentication パラメーターをGet-ChildItem
使用して、サーバーのすべての SSL 証明書を取得し、My
WebHosting
格納します。
$getChildItemSplat = @{
Path = 'cert:\LocalMachine\My', 'cert:\LocalMachine\WebHosting'
SSLServerAuthentication = $true
}
Get-ChildItem @getChildItemSplat
リモート コンピューターで期限切れの証明書を検索する
このコマンドは、コマンドレットを Invoke-Command
使用して、Srv01 および Srv02 コンピューターでコマンドを実行 Get-ChildItem
します。 ExpiringInDays パラメーターの値が 0 (0
) の場合、有効期限が切れた Srv01 コンピューターと Srv02 コンピューターの証明書が取得されます。
$invokeCommandSplat = @{
ComputerName = 'Srv01', 'Srv02'
ScriptBlock = {
Get-ChildItem -Path cert:\* -Recurse -ExpiringInDays 0
}
}
Invoke-Command @invokeCommandSplat
フィルターを組み合わせて特定の証明書セットを検索する
このコマンドは、次の属性を持つストアの LocalMachine
場所にあるすべての証明書を取得します。
fabrikam
DNS 名にClient Authentication
EKU で- SendAsTrustedIssuer プロパティの値
$true
- は、今後 30 日以内に期限切れになりません。
NotAfter プロパティは、証明書の有効期限を格納します。
[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 }
証明書 MMC スナップインを開く
このコマンドレットでは Invoke-Item
、既定のアプリケーションを使用して、指定したパスを開きます。 証明書の場合、既定のアプリケーションは証明書 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 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
証明書の移動
すべての SSL サーバー認証証明書を WebHosting ストアに移動する
このコマンドでは、コマンドレットを Move-Item
使用して証明書をストアから My
ストアに WebHosting
移動します。
Move-Item
では証明書ストアを移動できません。また、証明書の移動など、証明書を別のストアの場所にCurrentUser
移動LocalMachine
することはできません。 コマンドレットは Move-Item
ストア内で証明書を移動できますが、秘密キーは移動しません。
このコマンドでは、コマンドレットの SSLServerAuthentication パラメーターを Get-ChildItem
使用して、証明書ストア内の SSL サーバー認証証明書を My
取得します。
返された証明書はコマンドレットに Move-Item
パイプ処理され、証明書がストアに WebHosting
移動されます。
Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication |
Move-Item -Destination cert:\LocalMachine\WebHosting
証明書と秘密キーの削除
コマンドレットは Remove-Item
、指定した証明書を削除します。 DeleteKey 動的パラメーターは、秘密キーを削除します。
CA ストアから証明書を削除する
このコマンドは、CA 証明書ストアから証明書を削除しますが、関連付けられている秘密キーはそのまま残します。
Cert:
ドライブでは、コマンドレットは Remove-Item
DeleteKey、Path、WhatIf、Confirm パラメーターのみをサポートします。 その他のパラメーターはすべて無視されます。
Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0
DNS 名のワイルドカードを使用して証明書を削除する
このコマンドは、DNS 名が含まれているすべての証明書を削除します Fabrikam
。 コマンドレットの DNSName パラメーターをGet-ChildItem
使用して証明書を取得し、それらを削除するコマンドレットをRemove-Item
取得します。
Get-ChildItem -Path cert:\LocalMachine -DnsName *Fabrikam* | Remove-Item
リモート コンピューターから秘密キーを削除する
この一連のコマンドにより、委任が有効になり、リモート コンピューター上の証明書と関連付けられている秘密キーが削除されます。 リモート コンピューターで秘密キーを削除するには、委任された資格情報を使用する必要があります。
このコマンドレットを Enable-WSManCredSSP
使用して、S1 リモート コンピューター上のクライアントで資格情報セキュリティ サービス プロバイダー (CredSSP) 認証を有効にします。
CredSSP では、委任された認証が許可されます。
Enable-WSManCredSSP -Role Client -DelegateComputer S1
このコマンドレットを Connect-WSMan
使用して、S1 コンピューターをローカル コンピューター上の WinRM サービスに接続します。 このコマンドが完了すると、PowerShell のローカル WSMan:
ドライブに S1 コンピューターが表示されます。
Connect-WSMan -ComputerName S1 -Credential Domain01\Admin01
これで、ドライブのコマンドレットをSet-Item
WSMan:
使用して、WinRM サービスの CredSSP 属性を有効にすることができます。
Set-Item -Path WSMan:\S1\Service\Auth\CredSSP -Value $true
コマンドレットを使用して S1 コンピューターでリモート セッションを New-PSSession
開始し、CredSSP 認証を指定します。 セッションを変数に $s
保存します。
$s = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01
最後に、コマンドレットを Invoke-Command
使用して、 Remove-Item
変数内のセッションでコマンドを $s
実行します。 このコマンドではRemove-Item
、DeleteKey パラメーターを使用して、指定した証明書と共に秘密キーを削除します。
Invoke-Command -Session $s {
$removeItemSplat = @{
Path = 'cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2'
DeleteKey = $true
}
Remove-Item @removeItemSplat
}
期限切れの証明書を削除する
このコマンドは、有効期限が切れたストア内の証明書をGet-ChildItem
取得するために、値が指定されたコマンドレットの 0
ExpiringInDays パラメーターをWebHosting
使用します。
返された証明書を含む変数は、コマンドレットに Remove-Item
パイプ処理され、削除されます。 このコマンドでは、DeleteKey パラメーターを使用して、証明書と共に秘密キーを削除します。
$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey
証明書の作成
このNew-Item
コマンドレットでは、証明書プロバイダーに新しい証明書は作成されません。 New-SelfSignedCertificate コマンドレットを使用して、テスト用の証明書を作成します。
証明書ストアの作成
ドライブでは Cert:
、コマンドレットによって New-Item
ストアの場所に証明書ストアが LocalMachine
作成されます。 Name、Path、WhatIf、Confirm パラメーターがサポートされています。 その他のパラメーターはすべて無視されます。 このコマンドは、新しい証明書ストアを 表す System.Security.Cryptography.X509Certificates.X509Store を返します。
このコマンドは、ストアの場所に名前が付けられた CustomStore
新しい証明書ストアを LocalMachine
作成します。
New-Item -Path cert:\LocalMachine\CustomStore
リモート コンピューターに新しい証明書ストアを作成する
このコマンドを実行すると、Server01 コンピューター上のストアの場所に名前がLocalMachine
付けられたHostingStore
新しい証明書ストアが作成されます。
このコマンドでは、このコマンドレットを Invoke-Command
使用して Server01 コンピューターでコマンドを実行 New-Item
します。 このコマンドは、新しい証明書ストアを 表す System.Security.Cryptography.X509Certificates.X509Store を返します。
Invoke-Command -ComputerName Server01 -ScriptBlock {
New-Item -Path cert:\LocalMachine\CustomStore
}
WS-Man 用のクライアント証明書の作成
このコマンドは、WS-Management クライアントで使用できる ClientCertificate エントリを作成します。 新しい ClientCertificate が ClientCertificate ディレクトリの下に次のようにClientCertificate_1234567890
表示されます。 すべてのパラメーターは必須です。 発行者は 、発行者 の証明書の拇印である必要があります。
$newItemSplat = @{
Path = 'WSMan:\localhost\ClientCertificate'
Credential = Get-Credential
Issuer = '1b3fd224d66c6413fe20d21e38b304226d192dfe'
URI = 'wmicimv2/*'
}
New-Item @newItemSplat
証明書ストアの削除
リモート コンピューターから証明書ストアを削除する
このコマンドは、コマンドレットを Invoke-Command
使用して、S1 および S2 コンピューターでコマンドを実行 Remove-Item
します。 このRemove-Item
コマンドには Recurse パラメーターが含まれています。このパラメーターは、ストアを削除する前にストア内の証明書を削除します。
Invoke-Command -ComputerName S1, S2 -ScriptBlock {
Remove-Item -Path cert:\LocalMachine\TestStore -Recurse
}
動的パラメーター
動的パラメーターは、PowerShell プロバイダーによって追加されるコマンドレット パラメーターであり、プロバイダー対応ドライブでコマンドレットが使用されている場合にのみ使用できます。 これらのパラメーターは、証明書プロバイダーのすべてのサブディレクトリで有効ですが、証明書でのみ有効です。
Note
EnhancedKeyUsageList プロパティに対してフィルター処理を実行するパラメーターは、空の EnhancedKeyUsageList プロパティ値を持つ項目も返します。 空 の EnhancedKeyUsageList を持つ証明書は、すべての目的で使用できます。
次の証明書プロバイダー パラメーターは、PowerShell 7.1 で再導入されました。
- DNSName
- DocumentEncryptionCert
- EKU
- ExpiringInDays
- SSLServerAuthentication
CodeSigningCert <System.Management.Automation.SwitchParameter>
サポートされているコマンドレット
このパラメーターは、EnhancedKeyUsageList プロパティ値に含Code Signing
まれる証明書を取得します。
DeleteKey <System.Management.Automation.SwitchParameter>
サポートされているコマンドレット
このパラメーターは、証明書を削除するときに、関連付けられている秘密キーを削除します。
重要
リモート コンピューター上のストアのユーザー証明書に関連付けられている秘密キーを Cert:\CurrentUser
削除するには、委任された資格情報を使用する必要があります。 このコマンドレットはInvoke-Command
、CredSSP パラメーターを使用した資格情報の委任をサポートしています。 資格情報の委任と共Invoke-Command
に使用Remove-Item
する前に、セキュリティ上のリスクを考慮する必要があります。
このパラメーターは PowerShell 7.1 で再導入されました
DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>
サポートされているコマンドレット
このパラメーターは、証明書の DNSNameList プロパティで指定された doメイン 名前または名前パターンを持つ証明書を取得します。 このパラメーターの値には、次ASCII
のいずれかを指定Unicode
できます。 Punycode 値は Unicode に変換されます。 ワイルドカード文字 (*
) を使用できます。
このパラメーターは PowerShell 7.1 で再導入されました
DocumentEncryptionCert <System.Management.Automation.SwitchParameter>
サポートされているコマンドレット
このパラメーターは、EnhancedKeyUsageList プロパティ値に含Document Encryption
まれる証明書を取得します。
EKU <System.String>
サポートされているコマンドレット
このパラメーターは、証明書の EnhancedKeyUsageList プロパティで指定されたテキストまたはテキスト パターンを持つ証明書を取得します。 ワイルドカード文字 (*
) を使用できます。 EnhancedKeyUsageList プロパティには、EKU のフレンドリ名と OID フィールドが含まれています。
このパラメーターは PowerShell 7.1 で再導入されました
ExpiringInDays <System.Int32>
サポートされているコマンドレット
このパラメーターは、指定した日数以前に有効期限が切れている証明書を取得します。 値 0 は、有効期限が切れた証明書を取得します。
このパラメーターは PowerShell 7.1 で再導入されました
ItemType <System.String>
このパラメーターは、作成 New-Item
される項目の種類を指定するために使用されます。 コマンドレットは New-Item
値 Store
のみをサポートします。 New-Item
コマンドレットは新しい証明書を作成できません。
サポートされているコマンドレット
SSLServerAuthentication <System.Management.Automation.SwitchParameter>
サポートされているコマンドレット
SSL Web ホスティングのサーバー証明書のみを取得します。 このパラメーターは、EnhancedKeyUsageList プロパティ値に含Server Authentication
まれる証明書を取得します。
このパラメーターは PowerShell 7.1 で再導入されました
スクリプトのプロパティ
証明書を簡単に検索および管理できるように、証明書を 表す x509Certificate2 オブジェクトに新しいスクリプト プロパティが追加されました。
- DnsNameList: DnsNameList プロパティを設定するために、証明書プロバイダーは SubjectAlternativeName (SAN) 拡張機能の DNSName エントリからコンテンツをコピーします。 SAN 拡張子が空の場合、証明書の Subject フィールドのコンテンツがプロパティに入力されます。
- EnhancedKeyUsageList: EnhancedKeyUsageList プロパティを設定するために、証明書プロバイダーは、証明書の EnhancedKeyUsage (EKU) フィールドの OID プロパティをコピーし、それに対するフレンドリ名を作成します。
- SendAsTrustedIssuer: SendAsTrustedIssuer プロパティを設定するために、証明書プロバイダーは SendAsTrustedIssuer プロパティを証明書からコピーします。 詳細については、クライアント認証用の信頼された発行者の管理を参照してください。
これらの新機能を使用すると、DNS 名と有効期限に基づいて証明書を検索し、クライアント認証証明書とサーバー認証証明書を拡張キー使用法 (EKU) プロパティの値で区別できます。
パイプラインの使用
プロバイダー コマンドレットは、パイプライン入力を受け入れます。 パイプラインを使用すると、あるコマンドレットから別のプロバイダー コマンドレットにプロバイダー データを送信することで、タスクを簡略化できます。 プロバイダー コマンドレットでパイプラインを使用する方法の詳細については、この記事全体で提供されているコマンドレットリファレンスを参照してください。
ヘルプの表示
PowerShell 3.0 以降では、ファイル システム ドライブでこれらのコマンドレットがどのように動作するかを説明するプロバイダー コマンドレットのカスタマイズされたヘルプ トピックを取得できます。
ファイル システム ドライブ用にカスタマイズされたヘルプ トピックを取得するには、ファイル システム ドライブで Get-Help コマンドを実行するか、パラメーターGet-Help
を-Path
使用してファイル システム ドライブを指定します。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path cert:
関連項目
PowerShell