#问题:
当向一个https的url上发送请求,报错:未能创建 SSL/TLS 安全通道;
using (WebClient client = new WebClient())
{
string address="https://xxx.com";
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");
System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
var response = client.UploadData(address, "POST", encoding.GetBytes(msg));
}
#原因:
ssl证书不受信任,验证失败;
#解决方案:
请求之前,进行如下设置;
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;
}
简写
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
整合
1 public class Test
2 {
3 public void TestFun
4 {
5 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
6 using (WebClient client = new WebClient())
7 {
8 string address="https://xxx.com";
9 client.Headers.Add(HttpRequestHeader.ContentType,"text/xml");
10 System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
11 var response = client.UploadData(address, "POST", encoding.GetBytes(msg));
12 }
13 }
14 private bool CheckValidationResult(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors errors)
15 { // 总是接受 认证平台 服务器的证书
16 return true;
17 }
18 }
来源:oschina
链接:https://my.oschina.net/u/4355313/blog/3882784