【手记】解决“未能创建 SSL/TLS 安全通道”异常

本文解决了一项常见问题,即客户端访问HTTPS接口时出现的“未能创建SSL/TLS安全通道”错误。通过更新ServicePointManager.SecurityProtocol来启用所有可用的安全协议,包括Tls11和Tls12,可以解决此问题。但若使用.netframework4.0及以下版本,还需确保目标计算机已安装.net4.5或更高版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前写了一个桌面程序,程序会间歇性访问某个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

如此即可。

事实上,这个问题正是因为我的客户端是基于.net 4.0的,而4.0的ServicePointManager.SecurityProtocol默认就不含Tls11和Tls12,所以当服务端改用这两种安全协议时,自然访问不了。

 

201903081051更新:

然而事情并没有这么简单,按上述方法改好程序后,在有些电脑是能正常工作了,但在有台电脑仍然报错,只不过报错变成了“The requested security protocol is not supported”,中文应该是“不支持请求的安全协议”。搜索得知,需要在电脑上安装.net 4.5或更高版本的框架才行,对,即便程序项目框架只是4.0。

也就是说,如果操作系统是nt5.x(xp/2003),没戏,因为XP最高只能安装到.net 4.0,只能升级系统;而如果程序是基于4.0以下的版本,如2.0、3.5,那安装4.5+也不行,能不能解决和怎么解决我不知道,这篇文章看似相关,但我没实践,读者有需要的话可自行尝试。

相信随着越来越多服务端采用新协议,老迈的nt5.x以后会连上网都成问题,这是一个活生生的因发展而造成老产品被实质淘汰的案例。

 

-EOF-

posted on 2019-03-07 14:03 ahdung 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ahdung/p/10489229.html

"请求被中止: 未能创建 SSL/TLS 安全通道"的错误通常是由于服务器和客户端之间的安全协议不匹配导致的。解决这个问题的方法有两种。首先,你可以升级.NET Framework的版本到4.6或以上。这样可以确保你的应用程序支持最新的安全协议。另外,你还需要在创建地址之前启用对应SSL的安全协议。这可以通过设置ServicePointManager.SecurityProtocol属性来实现。你可以将以下代码添加到你的应用程序中: ```csharp ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.SystemDefault | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; ``` 这段代码会启用所有支持的安全协议,确保你的应用程序可以与服务器建立安全通道。注意,这段代码要写在创建地址之前才能生效。为什么要这样做,可能是由于接口修改了安全协议的原因。另外,如果你知道服务器所支持的具体安全协议,也可以只启用对应的安全协议。 最后,如果以上方法都没有解决问题,还可以尝试给证书授权。这可以通过在服务器上进行相应的配置来实现。具体的步骤可以参考相关的文档或向证书颁发机构咨询。 综上所述,要解决"请求被中止: 未能创建 SSL/TLS 安全通道"的错误,你可以升级.NET Framework版本到4.6或以上,并在创建地址之前启用对应SSL的安全协议。如果问题仍然存在,可以考虑给证书授权。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [两种方式彻底解决请求被中止: 未能创建 SSL/TLS 安全通道](https://blog.youkuaiyun.com/qq_30412045/article/details/124819059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [.NET 请求被中止: 未能创建 SSL/TLS 安全通道](https://blog.youkuaiyun.com/weixin_46990454/article/details/128575755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值