証明書ストア内の特定の X.509 証明書に関連付けられている秘密キー ファイルの場所と名前を見つけるのが難しい場合があります。 FindPrivateKey.exe ツールを使用すると、このプロセスが容易になります。
Von Bedeutung
FindPrivateKey サンプルを使用する前にビルドする必要があります。
X.509 証明書は、管理者またはコンピューター内の任意のユーザーによってインストールされます。 ただし、証明書は、別のアカウントで実行されているサービスによってアクセスされる可能性があります。 たとえば、NETWORK SERVICE アカウントなどです。
証明書が最初にインストールされていないため、このアカウントは秘密キー ファイルにアクセスできない可能性があります。 FindPrivateKey ツールを使用すると、特定の X.509 証明書の秘密キー ファイルの場所を指定できます。 特定の X.509 証明書の秘密キー ファイルの場所がわかったら、このファイルにアクセス許可を追加したり、アクセス許可を削除したりできます。
セキュリティに証明書を使用するサンプルでは、 Setup.bat ファイルの FindPrivateKey ツールを使用します。 秘密キー ファイルが見つかったら、 Cacls.exe などの他のツールを使用して、ファイルに適切なアクセス権を設定できます。
セルフホステッド実行可能ファイルなどのユーザー アカウントで Windows Communication Foundation (WCF) サービスを実行する場合は、ユーザー アカウントがファイルへの読み取り専用アクセス権を持っていることを確認します。 インターネット インフォメーション サービス (IIS) で WCF サービスを実行する場合、サービスが実行される既定のアカウントは、IIS 7 以前のバージョンの NETWORK SERVICE、または IIS 7.5 以降のバージョンのアプリケーション プール ID です。 詳細については、「 アプリケーション プール ID」を参照してください。
読み取り特権
プロセスに読み取り特権がない証明書にアクセスすると、次の例のような例外メッセージが表示されます。
System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"
この場合は、FindPrivateKey ツールを使用して秘密キー ファイルを検索し、サービスが実行されているプロセスのアクセス権を設定します。 たとえば、次の例に示すように、Cacls.exe ツールを使用してこれを行うことができます。
cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R
規則 -Command-Line エントリ
"[option]" は、省略可能なパラメーターのセットを表します。
"{option}" は必須のパラメーター セットを表します。
"option1 | option2" は、オプションのセットの選択を表します。
"<value>" は、入力するパラメーター値を表します。
使用方法
FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]
場所は:
パラメーター | 説明 |
---|---|
<subjectName> |
証明書のサブジェクト名 |
<thumbprint> |
証明書の拇印 (Certmgr.exe ツールを使用してこれを見つけることができます) |
-f |
出力ファイル名のみ |
-d |
出力ディレクトリのみ |
-a |
出力の絶対ファイル名 |
コマンド プロンプトでパラメーターが指定されていない場合は、この情報を含むヘルプ テキストが表示されます。
例示
次の使用例は、現在のユーザーの個人用ストアで、サブジェクト名が "CN=localhost" の証明書のファイル名を検索します。
FindPrivateKey My CurrentUser -n "CN=localhost"
次の使用例は、現在のユーザーの個人用ストアで、サブジェクト名が "CN=localhost" の証明書のファイル名を検索し、完全なディレクトリ パスを出力します。
FindPrivateKey My CurrentUser -n "CN=localhost" -a
この例では、ローカル コンピューターのパーソナル ストアで、拇印 "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52" の拇印を持つ証明書のファイル名を検索します。
FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"