2009-10-02 41 views
1

我正在編寫一個使用公共Web服務的系統。我正在使用VS2008和經典的.NET Framework 2.0 Web服務技術來使用Web服務。我的問題是不使用Web服務或調用它的操作。WSE3003:證書的信任鏈無法驗證

問題是,當我得到的迴應從它被簽署的操作背部和幕後的生成的代理開始驗證簽名。那時候我得到了WSE3003錯誤。我(想我)已經加載服務證書到我的LocalComputer/TrustedPeople證書存儲,當我看它的證書路徑,我可以看到一切正常:

威瑞信3級公共主CA
          www.verisign.com/CPS Incorp.by Ref。責任有限公司(C)97 ...
                    servcert.there.com

但我不斷收到以下異常:

Microsoft.Web .Services3.ResponseProcessingException: WSE910:一個響應消息的 處理期間發生錯誤,並且 你可以在內部 異常中找到錯誤。您還可以在響應 屬性中找到 響應消息。 ---> Microsoft.Web.Services3.Security.SecurityFault: 安全令牌不能 認證或授權---> System.Security.SecurityException: WSE3003:證書的信任鏈 不能被驗證。請檢查 如果證書已正確安裝 在受信任人 證書存儲。或者您可能希望 設置allowTestRoot配置 部分爲true,如果這是一個測試 證書。

下面的代碼可能無法編譯,我已經刪除了一些敏感的東西,但這裏是我後面怎麼做我的一部分的想法:

// Construct the wse proxy 
MyServiceWse wsClient = new MyServiceWse(); 

// Assign the credentials 
UsernameToken userToken = new UsernameToken("user", "pass", PasswordOption.SendPlainText); 
wsClient.SetClientCredential(userToken); 
wsClient.RequestSoapContext.IdentityToken = userToken; 

// Find the client and service certificates 
X509Certificate2 clientCert = MyCertificateManager.FindCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, "mycert.here.com"); 
X509Certificate2 serviceCert = MyCertificateManager.FindCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, "servicecert.there.com"); 

// Add the policy to the proxy 
Policy policy = new Policy(); 
MySecurityClientAssertion assertion = new MySecurityClientAssertion(); 
assertion.SetServiceCertificate(serviceCert); 
assertion.SetClientCertificate(clientCert); 
policy.Assertions.Add(assertion); 
wsClient.SetPolicy(policy); 

// Assign the service URL and call an operation 
wsClient.Url = "https://services.there.com/TheirService.asmx"; 
TheirOperationResponse r = wsClient.CallTheirOperation(); 

我當然希望我的代碼是錯誤的,因爲我可以理解,比證書存儲和信任鏈的東西好很多。任何幫助都會很棒。謝謝你的努力。

回答

2

如果問題是與鏈條,那麼所有的其他證書必須在cerificate店了。

所以讓我們從頂部開始;啓動MMC並添加證書管理管理單元並將其指向本地計算機帳戶。

現在在受信任的根權限檢查,「威瑞信3級公用主CA」是存在的,而你試圖使用證書中的根CA相匹配。 (它應該在那裏,這是一個標準的)。

下一步檢查www.verisign.com/CPS Incorp.by Ref。 LIABILITY LTD。(c)97 ...在中間認證機構商店。在我的機器上有兩個這些,其中一個已過期。

如果他們都存在,那麼您需要仔細查看證書鏈。在瀏覽器中加載Web服務,並查看從瀏覽器獲取的證書錯誤。如果您繼續訪問該網站,則可以點擊SSL圖標並按照您的方式進行操作。點擊掛鎖並選擇查看證書。然後選擇證書路徑選項卡。希望在那裏你會看到鏈條,突出問題證書(我現在找不到問題網站,所以我不記得它是什麼樣子)。選擇最低的一個,通過突出顯示錯誤並單擊查看證書來查看錯誤。你可能會發現它只是一個過期的證書或類似的東西。

相關問題