2012-06-11 51 views
2

我正在與使用傳輸安全性和證書身份驗證設置WCF服務(WebHttpBinding)的供應商合作。我爲正在正常工作的供應商提供類似的服務,所以我有一個基本的想法,它應該如何工作。儘管ServerCertificateValidationCallback返回true,但「無法爲具有權限的SSL/TLS建立安全通道」

在Windows 7上運行時,當我使用我自己的帳戶下的服務時,一切正常,我得到一個迴應。當我在測試帳戶下使用它時,我在mscorlib中遇到了一個異常:「無法爲權限爲X.X.X.X的SSL/TLS建立安全通道」。如果我將測試帳戶添加到內置的管理員組中,它可以正常工作。

服務器的證書是自簽名的,主題字段設置爲CN = X.X.X.X,並且我擁有個人存儲中的服務器證書和受信任的根證書頒發機構存儲中的CA證書。

此外,如果我嘗試設置System.Net.ServicePointManager.ServerCertificateValidationCallback來打印診斷並返回true,我會得到一些有趣的行爲。在我的帳戶下運行,回調被調用兩次,然後WCF調用成功。在測試帳戶下運行,它被調用一次,返回,然後我得到上面的異常。

我最好的猜測是,這與測試帳戶缺少的某些特權有關,但我不明白Windows如何處理證書以確保知道,並且我不知道從哪裏開始尋找。

+0

我忘記了將測試用戶更改爲本地管理員後重新登錄。當測試用戶是管理員時,它可以工作;如果沒有,我得到錯誤。編輯的問題。 – laindir

回答

3

花了幾個小時,在手機上使用微軟的工程師,但問題解決了。由於這與您在某些服務器證書問題中看到的完全相同的錯誤消息,我認爲必須是問題。事實證明,測試帳戶無權訪問客戶端證書私鑰。這應該可以使用winhttpcertcfg解決(如在winhttpcertcfg giving access to iiS user in Windows 7

+0

更簡單的方法是使用MMC並選擇所有任務 - >管理私鑰。正如我在關於鏈接帖子的評論中指出的那樣,如果證書位於個人存儲中,則這僅適用於Windows Server 2008(至少在Windows Server 2008中)。如果需要駐留在其他地方,請將其移至個人商店,然後設置權限,然後再將其移回。 – nullPainter

3

這是問題的根源: ...我有個人存儲中的服務器證書和受信任的根證書頒發機構存儲中的CA證書。

如果您安裝了測試帳戶的個人存儲區下的服務器證書應該解決這個問題,我覺得對於命令提示符的命令應該是這樣的

winhttpcertcfg.exe -g -c LOCALMACHINE \ MY -s「certtype 「‘testuseraccountname’

或使用MMC管理單元。(我也不太清楚如何可靠,這是,雖然,我用上面的工具)

+0

對不起,這是一個措辭不佳的選擇。當我說「個人商店」時,我的意思是Local Machine \ Personal在mmc管理單元中,這是LOCALMACHINE \ MY。如果我將它添加到我的測試帳戶,我仍然看到相同的錯誤。 – laindir

+0

此外,該命令將授予帳戶訪問私鑰 - 這不應該存在於客戶端。 – laindir

+0

正在接近的投票。 – laindir

相關問題