【手记】解决“未能创建 SSL/TLS 安全通道”异常
程序员文章站
2022-04-08 19:04:54
之前写了一个桌面程序,程序会间歇性访问某个https接口,一直用的好好的,今天突然报错了,异常就发生在访问接口的地方,曰“请求被中止,未能创建 SSL/TLS 安全通道。”,另外有台电脑也有跑该程序,也是同样的报错,看来是接口方改动过什么了。 搜索一番,原因应该是,接口方变更了安全协议,而客户端并未 ......
之前写了一个桌面程序,程序会间歇性访问某个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,所以当服务端改用这两种安全协议时,自然访问不了。
-eof-
上一篇: pk10冠亚和值大小技巧
下一篇: DSAPI 键盘鼠标钩子