【问题标题】:SSL WCF "Could not establish trust relationship for the SSL/TLS secure channel with authority 'localhost'SSL WCF“无法为具有权限‘localhost’的 SSL/TLS 安全通道建立信任关系
【发布时间】:2010-12-17 01:16:17
【问题描述】:

我有一个 WCF Web 服务,它可以与 http 地址完美配合,但从那时起我需要确保它可以通过 https 工作。

因为我使用的是 IIS 7,所以使用本指南 here 来启动和运行网站 https 绑定非常容易

我打开了一个浏览器,得到了通常的安全提示,但是在我添加了异常之后一切正常。

然后我决定安装证书,因为证书是本地主机,服务器和客户端是同一台机器 - 并让向导自动检测位置。

我回到我的 WCF CLIENT 代码,这是调用托管在 IIS(现在是 https)中的 Web 服务并在 2 个地方更改绑定的客户端。

  1. 端点地址改为https
  2. 将安全模式更改为传输

运行代码然后得到这个错误:

“无法为具有 'localhost' 权限的 SSL/TLS 安全通道建立信任关系。”

最后我回到 IIS 并在 SSL 设置下,将设置更改为接受客户端证书,并尝试检查是否需要检查,两次都产生相同的错误。

知道如何解决这个问题吗?

更新 问题 1 已修复 - 这是因为证书已颁发给 machine_name,而我在配置中使用 localhost。

现在这可行,我遇到了另一个问题:

https://[machine_name]/Downloads.svc 上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。”

Inner exception = "远程服务器返回错误:(404) Not Found。"

检查了 IIS 站点的 web.config,并将 DNS 绑定更改为 localhost。

这仍然很有趣,但根据微软的说法,这正是 WCF 应该好的原因,因为它将传输与编码逻辑分开,但到目前为止我必须告诉你,它看起来真的很复杂。

更新

关闭了windows防火墙,没有帮助...

这是我在 web.config 中的绑定

<basicHttpBinding>
     <binding name="IncreasedTimeout" 
              closeTimeout="12:00:00" openTimeout="12:00:00"
              receiveTimeout="12:00:00"
              maxReceivedMessageSize="1000000"
              sendTimeout="12:00:00">
       <security>
         <transport></transport>
       </security>
     </binding>
</basicHttpBinding>

【问题讨论】:

  • 谢谢 :) 我也为此苦苦挣扎。您的问题 #1 解决方案正是我所需要的。
  • 赞成修复问题 1... 我遇到了完全相同的问题!
  • 赞成修复问题 #1!

标签: c# wcf iis ssl


【解决方案1】:

您很可能需要为这两种协议添加明确的base addresses,以便 WCF 知道您想要绑定到这两种协议。尝试将此添加到您的 &lt;service&gt; 定义中:

<host>
    <baseAddresses>
        <add baseAddress="http://your-hostname-here/" />
        <add baseAddress="https://your-hostname-here/" />
    </baseAddresses>
</host>

另外,请确保您通过计算机的 WINS/DNS 名称访问服务,或者您需要在 IIS 下向网站实例添加显式主机标头。

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2018-11-10
    • 2014-08-07
    • 1970-01-01
    • 2015-02-12
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多