我正在編寫一個使用公共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();
我當然希望我的代碼是錯誤的,因爲我可以理解,比證書存儲和信任鏈的東西好很多。任何幫助都會很棒。謝謝你的努力。