• C# 解决“请求被中止: 未能创建 SSL/TLS 安全通道”的问题


    最近在开发项目的时候,使用爬虫抓取网络数据的时候,当请求Web数据时,碰到了“请求被中止: 未能创建 SSL/TLS 安全通道”的问题,尝试过很多网上的方法,例如添加证书等都没有用。最后在GitHub上面找到了解决方案,地址:https://github.com/paypal/TLS-update/blob/master/net/TlsCheck 特意记录下来,希望对碰到类似的问题的网友能够有所帮助。其实只要在创建请求地址的前面加了这句代码就可以了,如图所示:

      代码段:

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //加上这一句

     

    程序会间歇性访问某个https接口,一直用的好好的,今天突然报错了,异常就发生在访问接口的地方,曰“请求被中止,未能创建 SSL/TLS 安全通道。”,另外有台电脑也有跑该程序,也是同样的报错,看来是接口方改动过什么了。

    搜索一番,原因应该是,接口方变更了安全协议,而客户端并未启用该协议。解决办法自然就是:让客户端启用该协议。具体就是在发起网络请求之前确保ServicePointManager.SecurityProtocol中含有服务端所用的安全协议,如果不知道或希望客户端健壮一点,当然最简单的方式就是把所有可用的协议都启用,随你服务端将来怎么换。代码如下:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
    | SecurityProtocolType.Tls
    | SecurityProtocolType.Tls11
    | SecurityProtocolType.Tls12;
    但如果客户端是基于.net framework 4.0,SecurityProtocolType枚举中并没有Tls11和Tls12,这就需要直接填值:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
    | SecurityProtocolType.Tls
    | (SecurityProtocolType)0x300 //Tls11
    | (SecurityProtocolType)0xC00; //Tls12

  • 相关阅读:
    关于C语言字符串
    进程间通信方式总结
    数据结构(3)-----链表
    Oracle查看用户所在表空间
    oracle linux了解基本命令行
    关于分区技术的索引 index
    oracle闪回表详解
    转:深入学习Oracle分区表及分区索引
    第一章 基本的SQL语句 (SQL基础)
    linux根分区扩容
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/13602289.html
Copyright © 2020-2023  润新知