System.Net.WebException:“请求被中止: 未能创建 SSL/TLS 安全通道。”

¥10.00

使用HttpWebRequest请求Https网站时,程序抛出错误:System.Net.WebException:“请求被中止: 未能创建 SSL/TLS 安全通道。”


具体代码如下:

            if (en == null) en = Encoding.UTF8;
            String html;

            if (url.IndexOf("https") > -1)
            {
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
            }
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Timeout = 600000;

          
            //这里报错:System.Net.WebException:“请求被中止: 未能创建 SSL/TLS 安全通道。”
            WebResponse response = request.GetResponse();

            Stream dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream, en);
            String responseFromServer = reader.ReadToEnd();
            html = responseFromServer;
            Encoding en2 = GetEncoding(response.ContentType);//responseFromServer
            reader.Close();
            response.Close();


始于初秋 T0 发布于2个月前

最佳解决方案

原因分析

创建HttpWebRequest请求时指定的HTTPS协议与网站服务器要求的版本不一致,最后把.net支持的HTTPS协议版本全部指定了

要保证HttpWebRequest请求HTTPS网站时,双方支持的SSL/TLS的版本一致才能建 SSL/TLS 安全通道。可以在创建HttpWebRequest之前把net支持的SSL/TLS协议全部指定上去,比如:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;


CheckValidationResult实现方法:

  private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true; //总是接受  
        }


欢乐大象 T0 被采纳率100%
2021-02-20 11:26
打赏 0 0
页面统计
391 访问
0 帮助
0.00 打赏

hierror 2019 © hierror.com 京ICP备13026190号-1

通知消息
  • 暂无任何消息