我有一个 WCF Web 服务,可以与 http 地址完美配合,但从那时起我就需要确保它可以通过 https 工作。
因为我使用的是 IIS 7,所以使用本指南可以很容易地使网站 https 绑定(bind)并运行 here
我打开了一个浏览器,得到了通常的安全提示,但是在我添加了异常(exception)之后一切正常。
然后我决定安装证书,因为证书是本地主机,服务器和客户端是同一台机器 - 让向导自动检测位置。
我回到我的 WCF 客户端代码,这是调用 IIS(现在是 https)中托管的 Web 服务的客户端,并在 2 个地方更改了绑定(bind)。
- 将端点地址更改为https
- 将安全模式更改为传输
运行代码然后得到这个错误:
“无法与权限为‘localhost’的 SSL/TLS 安全通道建立信任关系。”
最后我回到 IIS 并在 SSL 设置下,将设置更改为接受客户端证书,并尝试检查是否需要,两次都产生相同的错误。
知道如何解决这个问题吗?
更新 问题 1 已修复 - 这是因为证书已颁发给 machine_name 并且我在配置中使用了 localhost。
现在这行得通了,我遇到了另一个问题:
没有端点在 https://[machine_name]/Downloads.svc 监听可以接受消息。这通常是由不正确的地址或 SOAP 操作引起的。有关详细信息,请参阅 InnerException(如果存在)。”
内部异常 = “远程服务器返回错误:(404) 未找到。”
检查了 IIS 站点的 web.config,并将 DNS 绑定(bind)更改为 localhost。
仍然对此很感兴趣,但根据 Microsoft 的说法,这正是 WCF 应该很好的原因,因为它将传输与编码逻辑分开,但到目前为止我必须告诉你,它看起来真的很复杂。
更新
关闭windows防火墙,没有帮助...
这是我在 web.config 中的绑定(bind)
<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>
最佳答案
您很可能需要添加明确的 base addresses对于这两种协议(protocol),WCF 知道您想要绑定(bind)到这两种协议(protocol)。尝试将此添加到您的 <service>
定义:
<host>
<baseAddresses>
<add baseAddress="http://your-hostname-here/" />
<add baseAddress="https://your-hostname-here/" />
</baseAddresses>
</host>
此外,请确保您正在通过计算机的 WINS/DNS 名称访问该服务,否则您需要在 IIS 下向网站实例添加显式主机 header 。
关于c# - SSL WCF "Could not establish trust relationship for the SSL/TLS secure channel with authority ' 本地主机',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1741994/