无法建立SSL / TLS安全通道的信任关系

我有一个简单的Web服务调用,由.NET(C#)2.0 Windows应用程序通过由Visual Studio生成的Web服务代理生成,也用于使用C#(2.0)编写的Web服务。 这已经工作了好几年,并且在它正在运行的十几个地方继续这样做。

新网站的新安装会遇到问题。 尝试调用Web服务时,它会失败,并显示以下消息:

无法建立SSL / TLS安全通道的信任关系

该Web服务的URL使用SSL(https://) - 但它已经在许多其他位置上工作了很长时间(并继续这样做)。

我在哪里看? 这可能是Windows和.NET之间的安全问题,这对于此安装是独一无二的吗? 如果是这样,我在哪里建立信任关系? 我迷路了!


想法(基于过去的痛苦):

  • 你有DNS和视线到服务器?
  • 您是否使用证书中的正确名称?
  • 证书仍然有效吗?
  • 是一个配置错误的负载均衡器搞砸了吗?
  • 新的服务器机器的时钟设置是否正确(即使UTC时间正确[忽略当地时间,这在很大程度上是无关紧要的)) - 这对WCF肯定很重要,所以可能会影响常规SOAP?
  • 是否存在证书信任链问题? 如果您从服务器浏览到soap服务,您能获得SSL吗?
  • 与上述相关 - 是否已将证书安装到正确的位置? (您可能需要受信任的根证书颁发机构副本)
  • 服务器的机器级代理设置是否正确? (这与用户的代理不同); 请参阅XP / 2003的proxycfg(不知道Vista等)

  • 以下代码片段将修复您所调用服务器上的SSL证书有问题的情况。 例如,它可能是自签名的,或者证书和服务器之间的主机名可能不匹配。

    如果您在直接控制之外拨打服务器, 这很危险 ,因为您无法再确定您正在与您认为已连接的服务器通话。 但是,如果您正在处理内部服务器,并且获得“正确”证书不切实际,请使用以下内容告诉Web服务忽略证书问题并勇敢地参与其中。

    前两个使用lambda表达式,第三个使用常规代码。 第一个接受任何证书。 最后两个至少检查证书中的主机名是否是您期望的。
    希望你觉得有用

    //Trust all certificates
    System.Net.ServicePointManager.ServerCertificateValidationCallback =
        ((sender, certificate, chain, sslPolicyErrors) => true);
    
    // trust sender
    System.Net.ServicePointManager.ServerCertificateValidationCallback
                    = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));
    
    // validate cert by calling a function
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);
    
    // callback used to validate the certificate in an SSL conversation
    private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
    {
        bool result = false;
        if (cert.Subject.ToUpper().Contains("YourServerName"))
        {
            result = true;
        }
    
        return result;
    }
    

    非常简单的“全部捕捉”解决方案是这样的:

    System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    

    sebastian-castaldi的解决方案更为详细。

    链接地址: http://www.djcxy.com/p/22101.html

    上一篇: Could not establish trust relationship for SSL/TLS secure channel

    下一篇: PHP: whats the total length of a post global variable?