2008-10-27 87 views
1

我有一個Web服務受保護,要求消費的第三方應用程序通過客戶端證書。我已經在生產環境和客戶端提供Web服務上安裝了證書。此過程目前正在爲其他類似設置的客戶端正常工作。目前的版本是用.NET 3.5編寫的,並且可以在我的開發機器上以卡西尼(並且獨立運行)完美工作,但拒絕使用相同的代碼和證書設置在我的生產機器上工作。我已經確認提供者Web服務通過瀏覽器接受安裝在客戶端上的證書,但是當以編程方式將證書添加到Web服務調用時,我得到403,訪問被拒絕。在向受保護的Web服務發出請求之前,我輸出添加到該調用中的證書的指紋,並且確實附加了正確的證書。我的想法是,在某個地方,它不能訪問證書的私鑰部分。通過客戶端證書只適用於我的機器

任何想法?

注意:我給IIS進程訪問相關的〜/ crypto目錄。

這是C#和.NET 3.5

+0

本文對於診斷新環境中的問題也很有幫助:http://support.microsoft.com/kb/901183 – 2008-12-03 15:11:53

+0

winhttpcertcfg.exe對於正確診斷至關重要。 – 2008-12-05 02:18:31

回答

2

幾周前我有這種問題。在我的情況下,解決方案是使用模擬爲了獲得適當的訪問證書存儲。默認情況下,IIS工作線程作爲系統用戶運行,因此無法訪問相應的存儲。將證書添加到特定的用戶存儲中,並模擬該用戶解決了所有問題。

不過,我會繼續關注這個問題,因爲我知道模擬不是魔術修復,而且在這種情況下會出現問題。

+0

你的文章讓我朝着正確的方向前進。感謝ZombieSheep! – 2008-10-29 19:54:49

0

有一個明顯的原因,它並沒有在我的機器上工作。在Visual Studio中運行時,它將使用我的憑證運行,這些證書用於安裝證書。從而自動有權訪問機器上的私鑰存儲。 但是在cassini外部(在IDE中)運行時,IIS進程沒有權限來訪問私鑰存儲。

臨時解決方案:運行應用程序域爲本地系統。安全性不好,但它會讓應用程序啓動並運行(雖然是波段輔助),直到我可以制定出更持久的解決方案。