【问题标题】:SSL/TLS WCF IssueSSL/TLS WCF 问题
【发布时间】:2014-04-04 08:30:08
【问题描述】:

我目前正致力于将第三方 API 集成到我们的软件中。其中一项要求是在 SSL/TLS 上使用 OAuth 样式的身份验证系统。

这不是问题,它工作了大约一天半。然后突然之间,它开始不断地向我返回此错误,即使在尝试进行身份验证时也是如此。

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

事实上它正在工作,但现在它并没有让我感到困惑,我什至不知道从哪里开始寻找解决这个问题。

所涉及的方法是从托管在 HTTPS 环境中的 WCF 服务调用的。我们有来自提供商的有效签名证书。实现中没有任何变化,它只是停止工作。

对于为什么我们会收到这样的错误,你们有什么建议吗?我什至不知道从哪里开始寻找。

更新

证书存在于受信任的存储中。

我们目前的网站为 www.mywebsite.co.uk,并带有该网站的有效证书。我们的服务位于 www.mywebsite.co.uk/Services。

我们还使用 Windows 服务,该服务使用位于 www.mywebsite.co.uk/Services 的相应 WCF。可能是导致问题的 Windows 服务吗? Windows 服务应用程序位于托管服务器上,即 Windows Server 2012。

更新 2

为了解决此问题,我们决定使用该方法忽略证书验证错误。这段代码摘录可以在此处的大量其他文章中找到,但无论如何,任何读者都可以在这里找到。

ServicePointManager.ServerCertificateValidationCallback = (obj, certificate, chain, errors) => true;

更新 3

好的,经过一番查看后,我设法从 ServerCertificateValidationCallback 中获取了这些错误。它告诉我有这个错误

RemoteCertificateNameMismatch

我们尝试访问以进行 API 调用的服务器有一个奇怪的网址,它与证书的颁发者/主题不匹配。这就是把它扔掉的原因吗?

【问题讨论】:

  • 检查证书并检查根证书是否在您的信任存储中。
  • 我已将证书添加到根存储以及域中。没有效果。我也更新了我的答案。
  • 您使用的是 Fiddler 还是其他解密 SSL 的代理?如果发生这种情况,您的代码会看到代理的证书,而不是目标服务器的证书。此外,如果信任链中的任何证书无效,则无论您是否将其放在受信任的存储中,您的证书都不再有效。禁用验证不是您可以部署到生产环境的解决方案。记住最近的 Safari 漏洞。
  • 啊,好吧,如果我使用 Fiddler 并且这会以某种方式更改证书信任链,这会导致此错误吗?
  • 使用 ServicePointManager.ServerCertificateValidationCallback 并检查错误是什么,而不是仅仅返回 true,这样您就可以看到错误。还要在 WCF 服务上运行详细跟踪,这可能会为您指明正确的方向

标签: c# wcf ssl


【解决方案1】:

我们尝试访问以进行 API 调用的服务器有一个奇怪的网址,它与证书的颁发者/主题不匹配。这就是把它扔掉的原因吗?

是的,是的。通过检查您打开连接的主机名与证书中标识的主机名之间的匹配来验证证书。主机名是“网址”的第一部分 - 例如,stackoverflow.comwww.google.com

【讨论】:

  • 好的,谢谢。由于这是我们客户的问题,我们已经与他们取得了联系。谢谢 :) 将标记为答案。
猜你喜欢
  • 1970-01-01
  • 2012-04-12
  • 2011-11-30
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多