首页 > 其他分享 >解决“未能创建 SSL/TLS 安全通道”异常

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

时间:2023-12-19 15:23:24浏览次数:28  
标签:TLS 4.0 创建 SSL 报错 SecurityProtocol SecurityProtocolType 客户端

之前写了一个桌面程序,程序会间歇性访问某个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以后会连上网都成问题,这是一个活生生的因发展而造成老产品被实质淘汰的案例。

 

 

以上是网上找到的解决方案,然而我参照修改之后仍然无法访问,还是报 未能创建 SSL/TLS 安全通道 ,

此时又想到一个问题,有可能是通道被关闭了,

用工具IISCrypto检查后发现确实如此,

 

 

 

解决:将TLS 1.0 和 TLS 1.1 全部勾上,或者点击Best Practices ,然后勾选 Reboot ,点击 Apply  ,服务器会重启,重启之后果然就好了。

标签:TLS,4.0,创建,SSL,报错,SecurityProtocol,SecurityProtocolType,客户端
From: https://www.cnblogs.com/Alex80/p/17913821.html

相关文章

  • 界面控件DevExpress WPF Dock组件,轻松创建类Visual Studio窗口界面!
    本文主要为大家介绍DevExpressWPF控件中的Dock组件,它能帮助用户轻松创还能受MicrosoftVisualStudio启发的Dock窗口界面。P.S:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用......
  • 转SSL相关
    intret;//constchar*pers="ssl_client1";mbedtls_entropy_contextentropy;mbedtls_ctr_drbg_contextctr_drbg;mbedtls_ssl_contextssl;mbedtls_ssl_configconf;voidssl_int(void){mbedtls_ssl_close_notify(&ssl);mbedtls_ssl_f......
  • TLSv1 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
    tls握手,客户端发送clienhello后就收到服务器端回的失败,抓包如下: 解决方案:本以为是ssl::context参数的设置原因,各种尝试,花了我两天时间,还ao了两个大夜。最终定位到具然是SNI设置的不对。查了一下SNI的作用,才上慌然大悟,这个参数要设置成访问目标服务器的域名。 不是我说的,T......
  • 自动化文件管理:使用Python创建匹配Excel数据的文本文件
    介绍在日常工作中,我们经常需要处理大量的数据和文件。尤其是在处理涉及多层嵌套目录和数据文件时,手动操作变得极其繁琐和耗时。为了提高效率,自动化这一过程显得尤为重要。本博客介绍了一个实用的Python脚本,它能够自动读取Excel表格中的数据,并在相应的文件夹中创建文本文件。这个......
  • C++图的邻接表创建
    C++图的邻接表存储结构typedefstructNode{ intnextVex; structNode*next; }*node;structHeadNode{ Eelement; structNode*next;};typedefstructGraphTable{ intvex,edge; structHeadNodeVertex[MAXV];}*Graph;图的创建函数Graphcreate(){ Grap......
  • pyqt5 子窗口的创建,以及主窗口和子窗口的通信
    使用designer画好ui,注意选择dialog对话框然后将ui文件转换成py目标和源文件换成你自己的pyuic5-oqt_hgbp.pyhtbp_autotest.ui主窗口调用子窗口方法一:常规调用,importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QDialog##引入主窗口ui转py文件fr......
  • shell脚本检测ssl证书有效时间
     [ytx@workshell]$catssl_check.sh#!/bin/bash#设置要检查的域名和端口DOMAIN="www.xxx.com"#域名PORT=443#端口#获取SSL证书信息CERT_INFO=$(openssls_client-connect${DOMAIN}:${PORT}-servername${DOMAIN}-showcerts</dev/null2>/dev......
  • Istio从入门到精通—— 流量治理的原理 —— VirutalService —— TLSMatchAttributes
    流量治理的原理——VirutalService—— TLSMatchAttributeshttps://istio.io/latest/docs/reference/config/networking/virtual-service/#TLSMatchAttributesTLSconnectionmatchattributes.FieldTypeDescriptionRequiredsniHostsstring[]SNI(s......
  • 创建rabbitmq用户时报错
    报错内容如下:Error:unabletoperformanoperationonnode'rabbit@bogon'.Pleaseseediagnosticsinformationandsuggestionsbelow.Mostcommonreasonsforthisare:Targetnodeisunreachable(e.g.duetohostnameresolution,TCPconnectionorfirewal......
  • Linux下4种快速创建大文件的方法
    1.使用dd命令创建大文件dd命令是实际写入硬盘,文件产生的速度取决于硬盘的读写速度,根据文件的大小,该命令将需要一些时间才能完成。创建一个名为test.img的2GB大小的文本文件,执行以下操作:ddif=/dev/zeroof=test.imgbs=2Gcount=1其中根据需要来更改块大小和块数。例如,......