【问题标题】:SSL error RemoteCertificateNameMismatchSSL 错误远程证书名称不匹配
【发布时间】:2024-04-27 13:35:01
【问题描述】:

我正在使用 WCF 让客户端访问服务。我正在尝试使用 TLS (https) 访问端点。我有带有私钥和公钥的证书。

如果我的服务端点的主机名与证书名称相同(“颁发给”),那么我可以从客户端访问该服务。

如果“颁发给”和端点域名的名称不同,我会收到错误消息“无法为具有权限的 SSL/TLS 安全通道建立信任关系”。我已将证书添加到“受信任的根”、“个人”和“受信任的人”。在我的服务中,我使用了“PeerOrChainTrust”。

如果有人对此有任何想法,请告诉我。

谢谢, 一月

【问题讨论】:

标签: wcf ssl


【解决方案1】:

在这种情况下,您需要在客户端为服务器定义信任策略,

在对服务进行任何调用之前调用一次 SetCertPolicy。

using System.Net;
using System.Security.Cryptography.X509Certificates;
        public static void SetCertPolicy()
        {
            ServicePointManager.ServerCertificateValidationCallback += RemoteCertValidate;
        }

        private static bool RemoteCertValidate( object sender, X509Certificate cert, X509Chain chain,
            SslPolicyErrors error )
        {
            // trust any cert!!!
            return true;
        }

【讨论】:

    【解决方案2】:

    我认为您不能覆盖对证书名称是否与服务器名称匹配的检查。

    某些代理允许您在警告后手动覆盖,但除非 WCF 具有禁用证书验证的设置,否则会带来所有危险。 SSL 设计的首要目的是让客户端能够验证它正在与哪个服务器通信,否则您将面临各种漏洞(包括中间人和假服务器)。

    【讨论】:

      相关资源