.NET 4.0调用Web服务时能否兼容使用TLS 1.2/1.1?
嘿,针对你提出的这两个关于.NET 4.0中TLS配置的问题,我来给你捋清楚:
问题1:在.NET中调用Web服务时,能否使用TLS 1.2,若1.2不可用则降级为TLS 1.1?
当然可以实现这种“优先高版本协议,不行就降级”的逻辑!不过在.NET 4.0里,你不用写额外的降级判断代码——只要同时启用TLS 1.2和TLS 1.1,.NET框架会自动和服务端完成协议协商:握手时先尝试TLS 1.2,如果服务端不支持,就会自动 fallback 到TLS 1.1,完全符合你的需求。
问题2:关于ServicePointManager.SecurityProtocol设置的兼容性、多选与组合逻辑
我把你的子问题拆开来逐个说:
- 向后兼容性:这个设置是完全向后兼容的。只要你指定的协议是客户端(你的程序)和服务端都支持的,就不会有问题。不过要注意:.NET 4.0默认是不认识TLS 1.2的,你得先给服务器/开发环境装对应的.NET 4.0补丁(比如KB3154518),不然代码里写了TLS1.2也不会生效。
- 是否只能二选一还是可同时启用:绝对不是只能二选一,你可以同时启用多个TLS/SSL协议。
- 能否通过逻辑或(OR)组合两者:必须可以!
SecurityProtocolType是一个标记枚举,天生支持按位或操作来组合多个值。直接上代码示例:
// 在.NET 4.0中同时启用TLS 1.1和TLS 1.2 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
把这段代码放在程序启动的最早期(比如Main方法开头,或者第一个Web请求发起之前),后续所有的Web请求都会遵循这个协议优先级来握手。
内容的提问来源于stack exchange,提问作者DSE
相关产品推荐
相关产品推荐

