WSE3003:无法验证证书的信任链

时间:2009-10-02 11:33:09

标签: c# .net ssl-certificate certificate

我正在编写一个使用公共Web服务的系统。我正在使用VS2008和经典的.NET Framework 2.0 Web服务技术来使用Web服务。我的问题是没有使用Web服务或调用它的操作。

问题是当我从签名的操作中得到响应时,生成的代理开始验证签名的幕后。那时我得到了WSE3003错误。我(我想)已经将服务证书加载到我的LocalComputer / TrustedPeople证书存储中,当我查看它的证书路径时,我可以看到一切正常:

  

VeriSign Class 3 Public Primary CA
  www.verisign.com/CPS Incorp.by参考。责任有限公司(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();

我当然希望我的代码是错误的,因为我能理解它比证书存储和信任链更好。任何帮助都会很棒。谢谢你的努力。

1 个答案:

答案 0 :(得分:2)

如果链条存在问题,那么所有其他证书也必须在证书存储区中。

让我们从顶部开始;启动MMC并添加“证书管理”管理单元并将其指向本地计算机帐户。

现在,在受信任的根权限中,检查“VeriSign Class 3 Public Primary CA”,并匹配您尝试使用的证书中的根CA. (它应该在那里,那是标准的)。

接下来请查看www.verisign.com/CPS Incorp.by参考。责任有限公司(c)97 ......在中间证书当局商店。在我的机器上有两个,其中一个已过期。

如果他们都在那里,那么你需要更近一点地看一下证书链。在浏览器中加载Web服务,查看从浏览器获得的证书错误。如果您继续访问该网站,您将能够单击SSL图标并向上开始。单击挂锁并选择查看证书。然后选择证书路径选项卡。希望你会看到链条,问题证书突出显示(我现在找不到问题网站,所以我不记得它是什么样的)。选择最低的一个,然后突出显示错误并单击查看证书。您可能会发现它只是一个过期的证书或类似的东西。