2013-04-13 114 views
1

我創建了自託管的WCF RESTful服務,其基本http身份驗證通過https與自簽名SSL證書一起運行。一切正常。當用戶通過Web瀏覽器訪問服務操作時,他們會彈出詢問憑據(登錄名/密碼)。具有證書身份驗證的WCF自託管服務

現在我想做證書認證,而不是基本的,但它不起作用。客戶端的瀏覽器(IE/chrome/firefox)從不提示選擇證書,我總是得到一個HTTP 403錯誤,當我在自定義證書驗證器中設置斷點時,它永遠不會觸發。所以我肯定在這裏錯過了一些東西。我嘗試使用Fiddler進行調試,並確認請求中沒有驗證標頭。

這是我的代碼來承載服務。

Uri baseAdress = new Uri("https://localhost:8446/"); 
WebServiceHost host = new WebServiceHost(typeof(RestService)); 
WebHttpBinding wb = new WebHttpBinding(); 
wb.Security.Mode = WebHttpSecurityMode.Transport; 
wb.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
host.AddServiceEndpoint(typeof(IRestService), wb, baseAdress); 
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = 
X509CertificateValidationMode.Custom; 
host.Credentials.ClientCertificate.Authentication.CustomCertificateValidator = 
new MyX509CertificateValidator() 
host.Open(); 

感謝您的任何提示。

+0

您是否也更新了客戶端配置? – evgenyl

+0

所有客戶端請求都是在Web瀏覽器(WebGet)中完成的,而不是代碼中的,因此我不知道要更新什麼。 –

+0

我想嘗試SvcTraceViewer,以及構建您自己的asp頁面進行測試。 – evgenyl

回答

1

感謝您的意見。 我發現什麼是錯的。

當我使用makecert工具爲ssl端口綁定創建自簽名證書時,我添加了「-eku」密鑰,該密鑰使證書用途成爲服務器身份驗證。我沒有這個選項重新創建了另一個,所以它可以用於所有目的。

另外我確定我的證書在當前用戶的個人存儲中。 之後,當客戶端輸入我的服務的URL時,他們會彈出一個消息,要求他們選擇一個證書,並且有我創建的證書。

對於那些面臨同樣問題的人,這個post可能會有用。