【问题标题】:self signed cert. The underlying connection was closed: Could not establish trust relationship自签名证书。底层连接已关闭:无法建立信任关系
【发布时间】:2012-06-29 17:55:33
【问题描述】:

尝试为我们的 Intranet 的 Web 服务站点设置自签名证书。证书本身显示它“正常”,但是当尝试从 Web 服务调用方法时会引发错误,并且在添加 Web 引用时会发出警告。

这里是步骤和一些屏幕截图,以确保我提供准确的信息。

Windows 服务器 2003。IIS。该网站是“WebServices.companyName.vmc”

这是网站的主机头

从服务器,它显示证书是 'ok'。

这里是一些网站设置


现在,在 Visual Studio 2008 中,添加网络参考

在弹出窗口中单击“是”

在此弹出窗口中单击“否”,依次多次。

在调用 Web 服务的代码行运行后...我收到此错误

底层连接已关闭:无法建立信任 SSL/TLS 安全通道的关系。

当 webservice 站点在浏览器中时,URL 栏旁边的小挂锁会提供以下消息:


这是我现有的代码:

Dim mySvc As New WebServices.InstantAccount
mySvc.calledFunction()


编辑

对于有类似问题的任何人,请阅读 iamkrillin 的答案和我的答案...因为它们都是解决问题的两种不同方式...取决于您可以控制的部分(代码或证书)。

【问题讨论】:

  • 也许这会对你有所帮助stackoverflow.com/questions/703272/…
  • 我之前读过那篇文章,我已经确认了一些事情,例如 DNS 视线,证书仍然有效,日期是正确的......但剩下的有点超出我。这就是为什么我发布了这么多截图。
  • 如果我不得不猜测,我会说“•您使用的证书名称是否正确?”是检查的好地方。但我不确定如何检查。
  • 正如@iamkrillin 下面的回答所暗示的那样,问题出在客户端接受来自不受信任的根证书提供商的证书。

标签: .net web-services security iis ssl-certificate


【解决方案1】:

在创建服务客户端之前在某处添加这行代码。

ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

请注意:这将导致您的应用接受所有无效证书并继续运行。如果这是不可接受的,您可以附加一个函数并进行处理以确定证书错误是否正常

【讨论】:

    【解决方案2】:

    iamkrillin 确实有一个可行的解决方案,因为他的代码将忽略无效证书,并允许应用程序使用 Web 服务。

    除此之外,我已经更正了证书,因此我不再需要忽略无效的证书。

    主机标头值(显示在 OP 中)是 WebServices.mycompany.vmc ,但证书的“通用名称”或“友好名称”(显示在 OP 屏幕截图 3 中的“证书路径”中)是 WebServices。

    通用名称,和网站网址需要匹配。我使用通用名称“WebServices.mycompany.vmc”重新创建了自签名证书,现在证书错误消失了。 Web 服务可供使用,编码人员无需忽略应用程序的无效证书。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多