【问题标题】:Calling a webservice "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel"调用 Web 服务“底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系”
【发布时间】:2013-03-13 04:26:57
【问题描述】:

stackoverflow 上有很多版本的这个问题。我已经尝试了很多那里建议的解决方案 - 但这些都不适合我。

我有一个在 Windows Server 2008 上的 IIS 上运行的 VB ASP.NET 应用程序。它调用一个 web 服务。运行 Web 服务的服务器具有自签名证书。我已将证书导入 IIS 机器的信任库。我可以在 IE->Options->Content->Certificates->Trusted Root Certification Authorities 中看到证书。

调用webservice时,抛出异常

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

相同的 IIS VB ASP.NET 应用程序在另一台具有类似设置的机器上运行良好。

这些是我检查过的不同的基本内容

  • 用于调用 Web 服务的 URL 与导入受信任根 CA 的证书上的 CN 相同。
  • 时间在调用机器和 web 服务主机之间同步
  • 证书未过期。
  • IIS 机器在 IIS 中有代理设置,但 Web 服务主机已添加到不应使用代理的例外列表中。

我在 VB.NET 中编写了一个小型命令行测试程序,调用相同的运行良好的 web 服务。

将证书导入受信任的 CA 存储后,我进行了 iisreset。

唯一我还没有尝试过的是重新启动 IIS 机器 - 这是生产机器,我至少有几天无法重新启动它。

我还能尝试什么?

【问题讨论】:

    标签: asp.net vb.net ssl webservice-client


    【解决方案1】:

    Internet Explorer 证书设置仅适用于当前用户。 您在操作 IE 时登录的用户与用于托管 IIS 应用程序的用户不太可能相同。您可以将证书添加到相应服务帐户的受信任证书中,但更简单的方法是将其添加到“本地计算机”受信任证书中。

    运行 Microsoft 管理控制台(在运行对话框中键入“mmc”)文件 > 添加/删除管理单元 > 证书,选择“计算机帐户”来管理要管理的证书。这样,服务器上的任何用户或服务帐户都会将证书视为受信任的。

    或者,根据您访问 Web 服务的方式,您可以在应用程序本身中添加异常。我会推荐检查证书指纹/哈希的代码,而不是允许它连接到任何不受信任的证书。

    【讨论】:

    • 谢谢 - 听起来合乎逻辑。我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多