2011-08-22 10 views
1

非常に基本的なWebサーバーを作成するのにHttpListenerを使用しています。私はhttpcfgツールを使ってSSLを使って適切なポートと証明書にバインドするように設定しました。これは正常に動作しているようです。クライアント証明書認証を使用したいと思います。だから、GetClientCertificateのオブジェクトをHttpListenerRequestオブジェクトに追加しましたが、いつもnullが返ってきます。私のテストクライアントは非常に簡単です:HttpListenerRequestがクライアント証明書を返さない

HttpWebRequest webReq = (HttpWebRequest) WebRequest.Create("https://127.0.0.1:8080/ssltest/"); 
webReq.ClientCertificates.Add(new X509Certificate2("ssltest.pfx", "ssltest")); 
webReq.GetResponse(); 

私はHttpcfgのツールは、クライアント証明書は、私が(-f 2)このフラグを指定するが、私はまだクライアント証明書を取得していないよ試してみましたので、交渉されるべきかどうかを示すフラグを持っていることに気づきました。私もthis Microsoft support issueに出くわしましたが、これはかなり関連しているようですが、私は最新の.NET 2.0サービスパックを使用しています。また、httpcfgフラグを試してみてください。

私はここで何かが分かりにくいと思っています。何か案は?

編集:私は非常に関連性が高いと思われるthis questionが見つかりました。残念なことに、その質問に対する回答は受け入れられていません。提案された答えは、私がすでに試したこと(httpcfgツールと適切なフラグ)を提案します。

+0

証明書が正しくロードされていますか?私はコンソールに証明書オブジェクトのいくつかのデバッグプロパティを書き留めておきます。 –

+0

十分に公正です。これを試してみましたが、X509Certificate2オブジェクトはClientCertificatesコレクションに追加する前に有効です。 – Dennis

+0

これが適切かどうかは分かりませんが、PFXファイルではなくCERファイルが表示されることが予想されます... PFXファイルには秘密鍵も含まれていますが、SSL要求には必要ないはずです。それでも、私はこれがうまくいくと思います。たぶんCERファイルの公開鍵だけをエクスポートしようとしますか? –

答えて

0

http://support.microsoft.com/kb/895971/en-usによれば、HttpWebRequest.ClientCertificates.Addはすでに検証を実行しているため、証明書はクライアント側で検証に失敗し、決して送信されません。

上記のリンクには、検証を緩和するコードが含まれています。

+0

うわー、それはまさにそれでした。私はおそらくそれがサーバーのために同じ方法で動作するので、それを知っていたはずです(鍵のペアは、動作するためにあなたの店に追加されなければなりません)。私は自分の個人ストアに証明書を最初に追加していたことに気付きました(Windowsは自動的にそこに追加したい)が、信頼できるルートストアにある必要があります。ご協力いただきありがとうございます。 – Dennis

関連する問題