【问题标题】:WSE3003: The certificate's trust chain could not be verifiedWSE3003:无法验证证书的信任链
【发布时间】:2010-12-03 07:11:38
【问题描述】:

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

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

威瑞信 3 类公共主要 CA
www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(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();

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

【问题讨论】:

    标签: c# .net ssl-certificate certificate


    【解决方案1】:

    如果问题出在链上,那么所有其他证书也需要在证书存储中。

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

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

    接下来检查 www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97... 位于中间证书颁发机构存储中。在我的机器上有两个,其中一个已过期。

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

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多