方法: X.509 証明書を WCF からアクセス可能にする
Windows Communication Foundation (WCF) から X.509 証明書にアクセスできるようにするには、アプリケーション コードで証明書ストアの名前と場所を指定する必要があります。 特定の状況では、X.509 証明書に関連付けられた秘密キーを格納しているファイルにプロセス ID がアクセスできる必要があります。 証明書ストア内の X.509 証明書に関連付けられている秘密キーを取得するには、それを行うためのアクセス許可が WCF に必要になります。 既定では、所有者と System アカウントだけが証明書の秘密キーにアクセスできます。
X.509 証明書を WCF からアクセス可能にするには
WCF が実行されているアカウントに対して、X.509 証明書に関連付けられている秘密キーを格納しているファイルへの読み取りアクセス権を与えます。
WCF に X.509 証明書の秘密キーへの読み取りアクセス権が必要かどうかを判断します。
次の表は、X.509 証明書を使用する際に秘密キーを使用できる必要があるかどうかを示しています。
X.509 証明書の使用法 秘密キー 送信 SOAP メッセージにデジタル署名する。 はい 受信 SOAP メッセージの署名を検証する。 いいえ 送信 SOAP メッセージを暗号化する。 いいえ 受信 SOAP メッセージを復号化する。 はい 証明書が格納されている証明書ストアの場所と名前を決定します。
証明書が格納されている証明書ストアは、アプリケーション コードまたは構成で指定します。 たとえば、次の例では、証明書が
CurrentUser
という名前のMy
証明書ストア内に存在することを指定します。cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com");
cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com")
FindPrivateKey ツールを使用して、証明書の秘密キーがコンピューター上のどこに存在するかを確認します。
FindPrivateKey ツールには、証明書ストアの名前、証明書ストアの場所、および証明書を一意に識別する情報を指定する必要があります。 このツールは、証明書のサブジェクト名または拇印を一意の識別子として受け入れます。 証明書の拇印を確認する方法の詳細については、「方法: 証明書のサムプリントを取得する」を参照してください。
次のコード例では、FindPrivateKey ツールを使用して、
CurrentUser
のMy
ストア内に存在する、拇印46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d
を持つ証明書の秘密キーの場所を特定します。findprivatekey.exe My CurrentUser -t "46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d" -a
WCF が実行されているアカウントを確認します。
次の表は、特定のシナリオで WCF が実行されているアカウントの詳細を示しています。
シナリオ プロセス ID クライアント (コンソールまたは WinForms アプリケーション) 現在ログインしているユーザー 自己ホスト型のサービス 現在ログインしているユーザー IIS 6.0 (Windows Server 2003) または IIS 7.0 (Windows Vista) でホストされているサービス。 NETWORK SERVICE IIS 5.X (Windows XP) でホストされているサービス。 Machine.config ファイル内の <processModel>
要素によって制御されます。 既定のアカウントは ASPNET です。icacls.exe などのツールを使用して、WCF が実行されているアカウントに、秘密キーを格納しているファイルへの読み取りアクセス権を与えます。
次のコード例では、指定したファイルの随意アクセス制御リスト (DACL) を編集して、NETWORK SERVICE アカウントにそのファイルへの読み取り (:R) アクセス権を与えます。
icacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /grant "NETWORK SERVICE":R