【问题标题】:WCF Could not establish trust relationship for the SSL/TLS secure channel with authorityWCF 无法为具有权限的 SSL/TLS 安全通道建立信任关系
【发布时间】:2023-03-15 07:02:01
【问题描述】:

场景:

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

  1. SERVICEB 或
  2. SERVICEC

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

问题:

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

*

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

*.

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

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

【问题讨论】:

标签: wcf ssl azure self-signed


【解决方案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;
};

【讨论】:

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