无法建立SSL / TLS安全通道的信任关系
我有一个简单的Web服务调用,由.NET(C#)2.0 Windows应用程序通过由Visual Studio生成的Web服务代理生成,也用于使用C#(2.0)编写的Web服务。 这已经工作了好几年,并且在它正在运行的十几个地方继续这样做。
新网站的新安装会遇到问题。 尝试调用Web服务时,它会失败,并显示以下消息:
无法建立SSL / TLS安全通道的信任关系
该Web服务的URL使用SSL(https://) - 但它已经在许多其他位置上工作了很长时间(并继续这样做)。
我在哪里看? 这可能是Windows和.NET之间的安全问题,这对于此安装是独一无二的吗? 如果是这样,我在哪里建立信任关系? 我迷路了!
想法(基于过去的痛苦):
以下代码片段将修复您所调用服务器上的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