2011-08-22 43 views
1

我正在使用HttpListener來創建非常基本的Web服務器。我已將它設置爲使用SSL使用httpcfg工具綁定到適當的端口和證書。這似乎工作正常。我現在想使用客戶端證書認證。因此,我在HttpListenerRequest對象上添加了對GetClientCertificate的呼叫,但總是會返回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

您確定證書已正確加載嗎?我會將cert對象的一些調試屬性寫入控制檯以確保。 –

+0

夠公平的。剛剛嘗試過,並且在將它添加到ClientCertificates集合之前,X509Certificate2對象有效。 – Dennis

+0

我不確定這是否相關,但我期望看到一個CER文件,而不是PFX文件那裏... PFX文件也將包含私鑰,您不應該需要SSL請求。不過,我希望這個工作。也許嘗試導出CER文件的公鑰? –

回答

0

根據http://support.microsoft.com/kb/895971/en-usHttpWebRequest.ClientCertificates.Add已執行驗證,因此證書在客戶端驗證失敗並且從未發送。

上面的鏈接包含代碼來放鬆驗證...從不在生產中使用它!

+0

哇,那就是它。我可能應該知道,因爲它對服務器的工作方式相同(密鑰對必須添加到您的商店才能使用)。我也意識到,我最初將證書添加到了我的個人商店(Windows想自動添加它),但它需要位於受信任的根存儲中。謝謝你的幫助。 – Dennis