WCF 无法为具有权限的 SSL/TLS 安全通道建立信任关系

Posted

技术标签:

【中文标题】WCF 无法为具有权限的 SSL/TLS 安全通道建立信任关系【英文标题】:WCF Could not establish trust relationship for the SSL/TLS secure channel with authority 【发布时间】:2012-02-01 04:17:18 【问题描述】:

场景:

我在 Azure 中托管了一个名为 SERVICEA 的 WCF Web 服务。它使用 HTTPS 的自签名证书。 这个SERVICEA检查传入的请求并确定是否调用:

    SERVICEB 或 SERVICEC

SERVICEB 和 SERVICEC 都使用自签名证书。对于 https。

问题:

当我部署 SERVICEA 并尝试调用以调用 SERVICEB 时,我收到以下错误消息:

*

无法为 SSL/TLS 安全通道建立信任关系 具有“SERVICEB ...”权限

*.

请注意,错误消息中显示的是 SERVICEB..。

请问有什么办法可以解决这个问题吗?

【问题讨论】:

谁能帮忙 Could not establish trust relationship for SSL/TLS secure channel -- SOAP的可能重复 【参考方案1】:

如果服务器证书自签名,则需要验证服务器证书,如下所示:

ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) => true;

【讨论】:

谢谢@Rajesh 我试过了,但还是不行。同样的错误。 @flybyte:你在哪里写的那段代码。该代码应该在客户端,即在调用 ServiceB 的 ServiceA 内部,因为 ServiceA 是 ServiceB 的客户端 -1:您的解决方案禁用了认证验证,如果应用程序处理多个自签名证书,这并不理想。 @reSPAWNed 您能否详细说明应用程序处理多个自签名证书的含义?还有一个问题是如何在使用自签名证书时让它工作。 @Rajesh:您的事件处理程序始终返回 true,而不是检查发件人、证书、链或错误参数。这意味着所有证书现在看起来都是有效的,即使这不是目的。如果应用程序访问多个 SSL 站点,那么它们的所有证书似乎都是有效的,而不仅仅是那些具有自签名证书的证书。看看我的回答,我提供了更详尽的解决方案。【参考方案2】:

您想要捕获 ServerCertificateValidationCallback 并使其忽略您选择的证书。 这是一篇不错的文章,解释了如何:http://blog.jameshiggs.com/2008/05/01/c-how-to-accept-an-invalid-ssl-certificate-programmatically/

【讨论】:

嗨@Igorek,谢谢。我们的网络服务由使用 php 和 Java 的第三方供应商使用。他们将如何实现相同的目标?导入证书是否存在安全风险?还是应该通过 RDP 将服务器证书安装到 Azure 服务器? 我对 PHP 和 Java 了解不多,但他们需要编写类似于提供的代码行来忽略自签名证书。这确实是一个安全风险。要做到这一点,需要购买有效的 SSL 证书并将其上传到您的 Azure 服务。 谢谢@Igorek,我首先尝试了Rajesh 的解决方案,它看起来很短但很有效。我一定会为您的链接添加书签。感谢您的帮助,非常感谢。【参考方案3】:

Rajesh 正在做某事,但他的回答完全禁用了认证检查。

相反,我建议应将如下事件处理程序添加到您的应用程序中:

ServicePointManager.ServerCertificateValidationCallback +=  (sender, certificate, chain, errors) =>

    var request = sender as HttpWebRequest;
    if (request != null && request.Address.Host == "<Your domain name goes here>")
        return true;

    return errors == SslPolicyErrors.None;
;

【讨论】:

以上是关于WCF 无法为具有权限的 SSL/TLS 安全通道建立信任关系的主要内容,如果未能解决你的问题,请参考以下文章

WCF 无法为具有 iis 权限的 SSL/TLS 安全通道建立信任关系

SSL WCF“无法为具有权限‘localhost’的 SSL/TLS 安全通道建立信任关系

在特定服务器上调用 WCF 服务时,“无法为具有权限的 ssl/tls 建立安全通道”

基于 SSL 的 WCF 服务无法为具有权限“test-service.hostname.com”的 SSL/TLS 建立安全通道

asp.net core 2.0 中的 WCF - 无法为具有权限的 SSL/TLS 安全通道建立信任关系

无法为具有权限“xxxxx.com”的 SSL/TLS 建立安全通道