Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “随机投掷”;无法为SSL/TLS安全通道建立信任关系;_C#_.net_Ssl_Https_Certificate - Fatal编程技术网

C# “随机投掷”;无法为SSL/TLS安全通道建立信任关系;

C# “随机投掷”;无法为SSL/TLS安全通道建立信任关系;,c#,.net,ssl,https,certificate,C#,.net,Ssl,Https,Certificate,我知道有,但我想我的情况可能不同 我们的应用程序需要向2个HTTPS URL发送请求:其中一个是ReCaptcha服务,另一个是来自巴西的一些政府服务(如果您来自巴西,可能您知道SEFAZ和NF-e的意思:D) 有时,两者都会停止工作。如标题所述,例外情况是“无法为SSL/TLS安全通道建立信任关系”。当其中一个开始抛出异常时,另一个也开始抛出异常,反之亦然:其中一个有效,另一个也有效 直到几天前,当这个异常开始随机抛出时,一切都正常运行。这个异常会引发我们的生产服务器和内部开发服务器 因此,有

我知道有,但我想我的情况可能不同

我们的应用程序需要向2个HTTPS URL发送请求:其中一个是ReCaptcha服务,另一个是来自巴西的一些政府服务(如果您来自巴西,可能您知道SEFAZ和NF-e的意思:D)

有时,两者都会停止工作。如标题所述,例外情况是“无法为SSL/TLS安全通道建立信任关系”。当其中一个开始抛出异常时,另一个也开始抛出异常,反之亦然:其中一个有效,另一个也有效

直到几天前,当这个异常开始随机抛出时,一切都正常运行。这个异常会引发我们的生产服务器和内部开发服务器

因此,有两个服务(ReCaptcha和这个Government服务)在两台服务器上同时停止工作,显然是随机的。他们停止工作,然后重新开始工作

在这两种情况下,CA根是不同的。一个使用GeoTrust Global CA,另一个使用ICP Brasil

,我们认为时钟可能是错的,但显然不是。我们经常检查它

我知道这个解决方案:

 ServicePointManager.ServerCertificateValidationCallback =
    ((sender, certificate, chain, sslPolicyErrors) => true);
但对我来说它看起来不太安全。使用这些解决方案有问题吗

我们也可以这样做:

ServicePointManager.ServerCertificateValidationCallback = 
    ((sender, cert, chain, errors) =>  cert.Subject.Contains("ServerName"));
但我们真的很好奇为什么这个异常明显是随机抛出的。如果我们不以“适当”的方式解决它,我们可能会使用它

所以,我们没有主意了。我们的服务在Windows Server 2008R2和IIS 7.5上运行。我还应该找什么

ServicePointManager.ServerCertificateValidationCallback=
((发送方、证书、链、sslPolicyErrors)=>true)

但对我来说它看起来不太安全。使用这些解决方案有问题吗

嗯,是的这样,您就允许每台带有任何证书的服务器成为您认为正在使用的服务器

这同样适用于:

ServicePointManager.ServerCertificateValidationCallback = 
((sender, cert, chain, errors) =>  cert.Subject.Contains("ServerName"));
这里仅验证
主题
是不够的。您至少应该在这里应用更多标准,例如,和来验证证书的正确性。 但伊姆霍:不要在现场环境中这样做-永远不要-仅用于开发和测试目的

关于主要错误-部分错误可能是问题的原因: 当两个证书同时停止工作时,很可能是证书链出现问题。链中两个证书使用的一部分可能不可用,因此信任链断开,无法建立安全通道


据我所知,您应该能够覆盖
服务器CertificateValidationCallback
,记录证书链。这将使您更接近错误源。

听起来更像是一个临时的网络问题。关于ssl的异常消息可能是一种误导。发生这种情况时,您是否检查了端点之间的连接?我们没有检查它。。。嗯,可能是这样。我会尽力去做的。谢谢谢谢我们记录了错误,很明显,我们的防火墙有时只是把它的证书放在CA根上,而不是正确的证书。