1:先加入命名空间
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
2:再重载CheckValidationResult方法,返回true
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) {
//直接确认,否则打不开
return true;
}
3:然后在HttpWebRequest req =(HttpWebRequest) WebRequest.Create(URL)前面加上如下一行代码
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);//验证服务器证书回调自动验证
疑问:这样虽然解决了未能创建 SSL/TLS 安全通道,但是安全吗?它是直接让证书的回调验证返回true了?
安全,当然你要是不放心呢,就把证书验证一次。
你要了解证书的验证流程就很好理解你需要不需要在ServerCertificateValidationCallback 中验证了。
比如张三给你一个客户端证书,你怎么知道这个证书是不是真的是张三给你的,还是李四冒认了张三的身份给你的客户端证书呢,这时候就需要在ServerCertificateValidationCallback中对客户端证书的真伪到CA进行是否是授信机构校验了,但是一般如果你明知道这个证书就是授信机构颁发给你的,就可以像你的代码里写的一样不去确认直接返回true