System.ServiceModel.Security.SecurityNegotiationException:无法为具有权限的 SSL/TLS 安全通道建立信任关系
Posted
技术标签:
【中文标题】System.ServiceModel.Security.SecurityNegotiationException:无法为具有权限的 SSL/TLS 安全通道建立信任关系【英文标题】:System.ServiceModel.Security.SecurityNegotiationException: Could not establish trust relationship for the SSL/TLS secure channel with authority 【发布时间】:2013-03-22 22:45:40 【问题描述】:我在尝试通过 UAT 环境调用 web 服务时遇到错误。但是在我的本地它工作正常。我看到一些评论,因为它可能是由于虚拟证书,但无法得到答案,所以在这里发布。我也是 WCF 的初学者。 请让我知道我该如何解决这个问题。
如果我完全信任的话会对生产产生什么影响
//Trust all certificates
System.Net.ServicePointManager.ServerCertificateValidationCallback =
((sender, certificate, chain, sslPolicyErrors) => true);
错误说 - System.ServiceModel.Security.SecurityNegotiationException: 无法为具有权限的 SSL/TLS 安全通道建立信任关系。 ---> System.Net.WebException:底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException: 根据验证程序,远程证书无效。
绑定是
<basicHttpBinding>
<binding name="GLEditServiceSOAP" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
还想知道它在我的本地主机上是如何工作的。
【问题讨论】:
您是否尝试将服务器的证书添加到受信任的证书存储中? 【参考方案1】:你可以参考这个帖子here。如帖子中所述,如果您使用 SSL 信任 URL,或者如果所有组件都托管在您公司的 Intranet 中,则在证书验证中始终返回 True 是安全的。
【讨论】:
它不是,因为证书验证用于验证您正在与受信任的端点交谈。如果你忽略这一点,你可能只是在不知情的情况下与中间的人交谈以上是关于System.ServiceModel.Security.SecurityNegotiationException:无法为具有权限的 SSL/TLS 安全通道建立信任关系的主要内容,如果未能解决你的问题,请参考以下文章