証明書プロバイダーについて

プロバイダー名

証書

ドライブ

Cert:

能力

ShouldProcess (処理が必要)

簡単な説明

PowerShell の X.509 証明書ストアと証明書へのアクセスを提供します。

詳細な説明

この情報は、Windows で実行されている PowerShell にのみ適用されます。

PowerShell Certificate プロバイダーを使用すると、PowerShell で証明書と証明書ストアを取得、追加、変更、クリア、および削除できます。

証明書 ドライブは、コンピューター上の証明書ストアと証明書を含む階層型名前空間です。

証明書プロバイダーは、この記事で説明する次のコマンドレットをサポートしています。

このプロバイダーによって公開される型

証明書ドライブは、次の種類を公開します。

  • ストアの場所 (Microsoft.PowerShell.Commands.X509StoreLocation) は、現在のユーザーとすべてのユーザーの証明書をグループ化する高レベルのコンテナーです。 各システムには、CurrentUser と LocalMachine (すべてのユーザー) ストアの場所があります。
  • 証明書ストア (System.Security.Cryptography.X509Certificates.X509Store): 証明書が保存および管理される物理ストアです。
  • X.509 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:

注

PowerShell ではエイリアスを使用して、プロバイダー パスを使い慣れた方法で操作できます。 dir や ls といったコマンドは、Get-ChildItemのエイリアスとなっています。cd は Set-Locationのエイリアスです。 pwd は、Get-Locationのエイリアスです。

Cert: ドライブの内容の表示

このコマンドでは、Get-ChildItem コマンドレットを使用して、CurrentUser 証明書ストアの場所に証明書ストアを表示します。

Cert:ドライブにいない場合は、絶対パスを使用します。

PS Cert:\CurrentUser\> Get-ChildItem

Cert: ドライブ内の証明書プロパティの表示

この例では、Get-Item を含む証明書を取得し、変数に格納します。 この例では、を使用した新しい証明書スクリプトのプロパティ (DnsNameList、EnhancedKeyUsageList、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 パラメーターと Get-ChildItem パラメーターを使用して、コード署名機関を持つコンピューター上のすべての証明書を取得します。

Get-ChildItem -Path cert: -CodeSigningCert -Recurse

期限切れの証明書を検索する

このコマンドは、 コマンドレットの Get-ChildItem パラメーターを使用して、今後 30 日以内に有効期限が切れる証明書を取得します。

Get-ChildItem -Path cert:\LocalMachine\WebHosting -ExpiringInDays 30

サーバー SSL 証明書の検索

このコマンドは、 コマンドレットの Get-ChildItem パラメーターを使用して、My および WebHosting ストア内のすべてのサーバー SSL 証明書を取得します。

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

リモート コンピューターで期限切れの証明書を検索する

このコマンドは、Invoke-Command コマンドレットを使用して、Srv01 および Srv02 コンピューターで Get-ChildItem コマンドを実行します。 0 パラメーターの値 0 () は、有効期限が切れた Srv01 コンピューターと Srv02 コンピューター上の証明書を取得します。

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

フィルターを組み合わせて特定の証明書セットを検索する

このコマンドは、次の属性を持つ LocalMachine ストアの場所にあるすべての証明書を取得します。

  • DNS 名に fabrikam する
  • EKU の Client Authentication
  • $true プロパティの の値
  • 30日以内に有効期限が切れないようにしてください。

NotAfter プロパティには、証明書の有効期限が格納されます。

[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
                                   }

証明書 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 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 コマンドレットを使用して、証明書を My ストアから WebHosting ストアに移動します。

Move-Item 証明書ストアは移動されず、証明書を別のストアの場所 ( LocalMachine から CurrentUser への移動など) には移動しません。 Move-Item コマンドレットは証明書を移動しますが、秘密キーは移動しません。

このコマンドは、 コマンドレットの Get-ChildItem パラメーターを使用して、My 証明書ストア内の SSL サーバー認証証明書を取得します。

返された証明書は、Move-Item コマンドレットにパイプ処理され、証明書が WebHosting ストアに移動されます。

Get-ChildItem cert:\LocalMachine\My -SSLServerAuthentication | Move-Item `
  -Destination cert:\LocalMachine\WebHosting

証明書と秘密キーの削除

Remove-Item コマンドレットは、指定した証明書を削除します。 DeleteKey 動的パラメーターは、秘密キーを削除します。

CA ストアから証明書を削除する

このコマンドは、CA 証明書ストアから証明書を削除しますが、関連付けられている秘密キーはそのまま残します。

ドライブでは、 コマンドレットは、DeleteKey、Path、WhatIf、および Confirm パラメーターのみをサポート 。 その他のパラメーターはすべて無視されます。

Remove-Item cert:\LocalMachine\CA\5DDC44652E62BF9AA1116DC41DE44AB47C87BDD0

DNS 名のワイルドカードを使用して証明書を削除する

このコマンドは、Fabrikamを含む DNS 名を持つすべての証明書を削除します。 コマンドレットの 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

New-PSSession コマンドレットを使用して S1 コンピューターでリモート セッションを開始し、CredSSP 認証を指定します。 セッションを $s 変数に保存します。

$s  = New-PSSession S1 -Authentication CredSSP -Credential Domain01\Admin01

最後に、Invoke-Command コマンドレットを使用して、Remove-Item 変数のセッションで $s コマンドを実行します。 Remove-Item コマンドは、DeleteKey パラメーターを使用して、指定した証明書と共に秘密キーを削除します。

Invoke-Command -Session $s { Remove-Item `
  -Path cert:\LocalMachine\My\D2D38EBA60CAA1C12055A2E1C83B15AD450110C2 `
  -DeleteKey
  }

期限切れの証明書を削除する

このコマンドは、 コマンドレットの Get-ChildItem パラメーターを使用し、値が 0 で期限切れになった WebHosting ストア内の証明書を取得します。

返された証明書を含む変数は、Remove-Item コマンドレットにパイプ処理され、削除されます。 このコマンドでは、DeleteKey パラメーターを使用して、証明書と共に秘密キーを削除します。

$expired = Get-ChildItem cert:\LocalMachine\WebHosting -ExpiringInDays 0
$expired | Remove-Item -DeleteKey

証明書の作成

New-Item コマンドレットでは、証明書プロバイダーに新しい証明書は作成されません。 New-SelfSignedCertificate コマンドレットを使用して、テスト用の証明書を作成します。

証明書ストアの作成

Cert: ドライブでは、New-Item コマンドレットによって、LocalMachine ストアの場所に証明書ストアが作成されます。 名の、パス、WhatIf、および パラメーターの確認 をサポートしています。 その他のパラメーターはすべて無視されます。 このコマンドは、新しい証明書ストアを表す System.Security.Cryptography.X509Certificates.X509Store を返します。

このコマンドは、CustomStore ストアの場所に LocalMachine という名前の新しい証明書ストアを作成します。

New-Item -Path cert:\LocalMachine\CustomStore

リモート コンピューターに新しい証明書ストアを作成する

このコマンドを実行すると、HostingStore という名前の新しい証明書ストアが、Server01 コンピューターの LocalMachine ストアの場所に作成されます。

このコマンドでは、Invoke-Command コマンドレットを使用して、Server01 コンピューターで New-Item コマンドを実行します。 このコマンドは、新しい証明書ストアを表す System.Security.Cryptography.X509Certificates.X509Store を返します。

Invoke-Command { New-Item -Path cert:\LocalMachine\CustomStore } `
  -ComputerName Server01

WS-Man 用のクライアント証明書の作成

このコマンドは、WS-Management クライアントで使用できる ClientCertificate エントリ 作成します。 新しい ClientCertificate は、 ClientCertificate ディレクトリの下に " ClientCertificate_1234567890" と表示されます。 すべてのパラメーターは必須です。 発行者 は、発行者の証明書の拇印である必要があります。

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

証明書ストアの削除

リモート コンピューターから証明書ストアを削除する

このコマンドは、Invoke-Command コマンドレットを使用して、S1 および S2 コンピューターで Remove-Item コマンドを実行します。 Remove-Item コマンドには、ストアを削除する前にストア内の証明書を削除する Recurse パラメーターが含まれています。

Invoke-Command { Remove-Item -Path cert:\LocalMachine\TestStore -Recurse } `
  -ComputerName S1, S2

動的パラメーター

動的パラメーターは、PowerShell プロバイダーによって追加されるコマンドレット パラメーターであり、プロバイダー対応ドライブでコマンドレットが使用されている場合にのみ使用できます。 これらのパラメーターは、Certificate プロバイダーのすべてのサブディレクトリで有効ですが、証明書でのみ有効です。

注

EnhancedKeyUsageList プロパティに対してフィルター処理を実行するパラメーターは、空の EnhancedKeyUsageList プロパティ値を持つ項目も返します。 EnhancedKeyUsageList 空の証明書は、あらゆる目的で使用できます。

次の証明書プロバイダー パラメーターは、PowerShell 7.1 で再導入されました。

  • DNSネーム
  • DocumentEncryptionCert の
  • エク
  • 有効期限日数
  • SSLServerAuthentication の

CodeSigningCert の <System.Management.Automation.SwitchParameter>

サポートされているコマンドレット

このパラメーターは、Code Signing プロパティ値に を持つ証明書を取得します。

DeleteKey <System.Management.Automation.SwitchParameter>

サポートされているコマンドレット

このパラメーターは、証明書を削除するときに、関連付けられている秘密キーを削除します。

Von Bedeutung

リモート コンピューター上の Cert:\CurrentUser ストア内のユーザー証明書に関連付けられている秘密キーを削除するには、委任された資格情報を使用する必要があります。 Invoke-Command コマンドレットは、CredSSP パラメーターを使用した資格情報の委任をサポートします。 Remove-Item と資格情報の委任で Invoke-Command を使用する前に、セキュリティ上のリスクを考慮する必要があります。

このパラメーターは PowerShell 7.1 で再導入されました

DnsName <Microsoft.PowerShell.Commands.DnsNameRepresentation>

サポートされているコマンドレット

このパラメーターは、証明書の DNSNameList プロパティで指定されたドメイン名または名前パターンを持つ証明書を取得します。 このパラメーターの値は、Unicode または ASCIIにすることができます。 Punycode 値は Unicode に変換されます。 ワイルドカード文字 (*) を使用できます。

このパラメーターは PowerShell 7.1 で再導入されました

DocumentEncryptionCert <System.Management.Automation.SwitchParameter>

サポートされているコマンドレット

このパラメーターは、Document Encryption プロパティ値に を持つ証明書を取得します。

EKU <System.String>

サポートされているコマンドレット

このパラメーターは、証明書の EnhancedKeyUsageList プロパティで指定されたテキストまたはテキスト パターンを持つ証明書を取得します。 ワイルドカード文字 (*) を使用できます。 EnhancedKeyUsageList プロパティには、EKU のフレンドリ名と OID フィールドが含まれます。

このパラメーターは PowerShell 7.1 で再導入されました

有効期限日数 <System.Int32>

サポートされているコマンドレット

このパラメーターは、指定した日数以前に有効期限が切れている証明書を取得します。 値 0 は、有効期限が切れた証明書を取得します。

このパラメーターは PowerShell 7.1 で再導入されました

ItemType <System.String>

このパラメータを使用すると、 New-Itemによって作成されるアイテムのタイプを指定できます。

Certificate ドライブでは、次の値を使用できます。

  • Certificate Provider
  • Certificate
  • Store
  • StoreLocation

サポートされているコマンドレット

SSLServerAuthentication <System.Management.Automation.SwitchParameter>

サポートされているコマンドレット

SSL Web ホスティングのサーバー証明書のみを取得します。 このパラメーターは、Server Authentication プロパティ値に を持つ証明書を取得します。

このパラメーターは PowerShell 7.1 で再導入されました

スクリプトのプロパティ

証明書を簡単に検索および管理できるように、証明書を表す x509Certificate2 オブジェクトに新しいスクリプト プロパティが追加されました。

  • DnsNameList: DnsNameList プロパティを設定するために、証明書プロバイダーは SubjectAlternativeName (SAN) 拡張機能の DNSName エントリからコンテンツをコピーします。 SAN 拡張機能が空の場合、プロパティには証明書の [サブジェクト] フィールドのコンテンツが設定されます。
  • EnhancedKeyUsageList: EnhancedKeyUsageList プロパティを設定するために、証明書プロバイダーは、証明書の EnhancedKeyUsage (EKU) フィールドの OID プロパティをコピーし、それに対するフレンドリ名を作成します。
  • SendAsTrustedIssuer: SendAsTrustedIssuer プロパティを設定するために、証明書プロバイダーは証明書から SendAsTrustedIssuer プロパティをコピーします。 詳細については、「クライアント認証の信頼された発行者の管理」を参照してください。

これらの新機能を使用すると、DNS 名と有効期限に基づいて証明書を検索し、クライアント認証証明書とサーバー認証証明書を拡張キー使用法 (EKU) プロパティの値で区別できます。

パイプラインの使用

プロバイダー コマンドレットは、パイプライン入力を受け入れます。 パイプラインを使用すると、あるコマンドレットから別のプロバイダー コマンドレットにプロバイダー データを送信することで、タスクを簡略化できます。 プロバイダー コマンドレットでパイプラインを使用する方法の詳細については、この記事全体で提供されているコマンドレットリファレンスを参照してください。

ヘルプを受ける

PowerShell 3.0 以降では、ファイル システム ドライブでこれらのコマンドレットがどのように動作するかを説明するプロバイダー コマンドレットのカスタマイズされたヘルプ トピックを取得できます。

ファイル システム ドライブ用にカスタマイズされたヘルプ トピックを取得するには、ファイル システム ドライブで Get-Help コマンドを実行するか、-Path の Get-Help パラメーターを使用してファイル システム ドライブを指定します。

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

こちらも参照ください