次の方法で共有


FindPrivateKey

Download sample

証明書ストア内の特定の X.509 証明書に関連付けられている秘密キー ファイルの場所と名前を見つけることが困難な場合があります。FindPrivateKey.exe ツールを使用すると、この処理を容易に実行できます。

X.509 証明書は、コンピュータの管理者または任意のユーザーによってインストールされます。ただし、証明書は別のアカウント (Windows XP の ASPNET、Windows Server 2003 の NETWORK SERVICE アカウントなど) で実行されているサービスからアクセスすることができます。

別のアカウントでは、秘密キー ファイルへアクセスできない場合があります。これは、証明書が最初にこのアカウントによってインストールされていないからです。FindPrivateKey ツールでは、指定された X.509 証明書の秘密キー ファイルの場所を検索できます。特定の X.509 証明書の秘密キー ファイルの場所がわかれば、このファイルに対するアクセス許可の追加または削除を実行できます。

セキュリティ用の証明書を使用するこのサンプルでは、Setup.bat ファイル内の FindPrivateKey ツールを使用します。秘密キー ファイルが見つかったら、Cacls.exe などの別のツールを使用して、このファイルに対する適切なアクセス権を設定できます。

自己ホスト型の実行可能ファイルなどの Windows Communication Foundation (WCF) サービスをユーザー アカウントで実行している場合は、そのユーザー アカウントがそのファイルへの読み取り専用のアクセス権限を持っていることを確認します。インターネット インフォメーション サービス (IIS) で WCF サービスを実行している場合、サービスが実行されている既定のアカウントは、Windows XP では ASPNET、Windows Server 2003 では NETWORK SERVICE です。これらのアカウントには、既定では秘密キー ファイルへのアクセス権限がありません。

証明書にアクセスする際、プロセスにその証明書に対する読み取り権限がない場合、次の例のような例外メッセージが表示されます。

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

FindPrivateKey プロジェクトをビルドするには

  1. Windows エクスプローラを開き、サンプルのインストール ディレクトリに存在する言語固有のサブディレクトリに移動します。

  2. .sln ファイルのアイコンをダブルクリックして、このファイルを Visual Studio で開きます。

  3. [ビルド] メニューの [ソリューションのリビルド] をクリックします。クライアント プログラムが client\bin にビルドされ、サービス プログラムが service\bin にビルドされます。

  4. ソリューションをビルドすると、FindPrivateKey.exe ファイルが生成されます。

規則 - コマンド ラインのエントリ

"[option]" は省略可能なパラメータのセットを表します。

"{option}" は必須パラメータのセットを表します。

"option1 | option2" はオプションのセットから選択することを表します。

"<>" は入力されたパラメータ値を表します。

使用方法

FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]

 

指定する項目は次のとおりです。

       <subjectName> The subject name of the certificate
       <thumbprint>  The thumbprint of the certificate (You can use the Certmgr.exe tool to find this)
       -f            output file name only
       -d            output directory only
       -a            output absolute file name

コマンド プロンプトでパラメータを指定しない場合、このヘルプ テキストが表示されます。

この例では、現在のユーザーの Personal ストアで、"CN=localhost" というサブジェクト名を持つ証明書のファイル名を検索します (FindPrivateKey My CurrentUser -n "CN=localhost")。

この例では、現在のユーザーの Personal ストアで、"CN=localhost" というサブジェクト名を持つ証明書のファイル名を検索し、ディレクトリの完全パスを出力します。

User.FindPrivateKey My CurrentUser -n "CN=localhost" -a

この例では、ローカル コンピュータの Personal ストアで、"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" –c

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.