【发布时间】:2010-10-06 21:16:43
【问题描述】:
我目前正在与第 3 方创建的系统集成。该系统要求我使用 XML/HTTPS 发送请求。第 3 方将证书发给我,我安装了它
我使用以下代码:
using (WebClient client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");
System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
var response = client.UploadData(address, "POST", encoding.GetBytes(msg));
}
此代码返回以下WebException:
底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。
更新因为它是我正在使用的测试服务器,所以证书不受信任并且验证失败...要在测试/调试环境中绕过此问题,请创建一个新的 ServerCertificateValidationCallback
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(bypassAllCertificateStuff);
这是我的“假”回调
private static bool bypassAllCertificateStuff(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}
【问题讨论】:
-
+1 用于使用您使用的代码进行更新。因此,对我来说很好的快速修复。
-
这在调试 SSL web 服务时非常有用,而不是将提琴手 CA 根注册到我的开发机器中!我只是在添加虚拟回调的部分周围放置了一个#if DEBUG,以不将其放入生产代码中。
-
这绝对适用于 .NET 4.5,但不适用于 4.6。我想知道为什么。