2012-01-04 105 views
1

我試圖通過使用服務器證書來保護我們的web服務。爲了測試,我在IIS管理控制檯上創建了一個自簽名證書,並將該站點配置爲使用證書。 在IIS上,我創建了HTTPS綁定,並將其配置爲使用證書。在我的web服務的虛擬路徑上啓用SSL,並將其設置爲要求客戶端證書。在SSL上使用服務器證書時出現HTTP錯誤403.7

右鍵單擊證書,將其與密碼一起導出到測試客戶端的文件系統。

我用下面的代碼來調用使用證書作爲客戶端證書的web服務:

SSLServiceReference.DataAccessService lService = new SSLServiceReference.DataAccessService(); 
X509Certificate2 lCert = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"C:\Users\Dev06\Documents\TestSamsung2Cert.pfx", "qwerty"); 
lService.ClientCertificates.Add(lCert); 
lService.Credentials = CredentialCache.DefaultNetworkCredentials; 
DataSet lSet = lService.GetSites(); 

但在()我接收403.7 http錯誤GetSites的調用。 我在做什麼錯?我的意圖是要求消費Web服務的客戶呈現此證書,以便只有他們可以調用它。

IIS 7

謝謝你的任何指針。

回答

3

要澄清,您不需要需要服務器和客戶端將使用相同的證書,實際上它可能是一個更好的主意,每個使用一個唯一的證書。服務器端的IIS將很滿意任何客戶端證書(除非您另行配置它或者編寫代碼來檢查證書並根據特定字段批准/拒絕)。也就是說,我不認爲這是你遇到的問題的原因。這可能是由於客戶端無法真正訪問證書或其私鑰。

如果您將pfx證書「安裝」到客戶機的證書存儲區,您可能會有更好的運氣。然後,您需要再次將其導出爲.cer文件配置對運行您的客戶端應用程序(即網絡服務)的帳戶的私鑰的訪問。

看到這個在這裏,如果你遵循這些步驟(例如安裝PFX到客戶端的本地計算機存儲和配置使用其私有密鑰),你應該在業務:

http://msdn.microsoft.com/en-us/library/ff649203.aspx

我我不確定你使用的是什麼IIS版本,但後來的版本實際上使這個過程更容易一些。另外我發現,當事情真的很奇怪時,使用WireShark等工具檢查初始SSL握手流量可能會有幫助。它可以幫助您確定問題出在客戶端還是服務器上。在這種情況下,它看起來像客戶端。

+0

謝謝,我會盡力回覆你。如果客戶端和服務器都有不同的證書(其中IIRC足以進行SSL通信),那麼如何驗證只有某些證書才能訪問站點/服務?有人告訴我,分享證書是爲了實現這一目標所要做的。 – 2012-01-04 14:24:34

+1

有幾種方法:1)默認情況下拒絕未受信任CA簽名的客戶端證書。你可以在服務器上限制可信任的CA(我不推薦這麼做)2)你可以在你的應用程序中編寫代碼來檢查證書並做出決定是否可以訪問(這是我一直以來的做法)。或3)IIS有辦法將客戶端證書映射到用戶帳戶(我沒有使用過)。 – mikey 2012-01-04 17:56:43

+0

我看到你正在使用IIS7,不知道什麼操作系統,但在新的操作系統,你可以通過證書MMC(用戶界面)訪問證書的私鑰。在過去,您必須使用我發佈的鏈接中提到的命令行工具winhttpcertcfg。 – mikey 2012-01-04 18:00:45