与支持最多TLS 1.2
的服务器通信的默认安全协议是什么?默认情况下,.NET
将选择服务器端支持的最高安全协议,还是我必须显式地添加这行代码:
System.Net.ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
除了代码更改之外,是否有方法更改此默认值?
最后,.NET 4.0
是否只支持到TLS 1.0
?例如,我必须将客户端项目升级到4.5以支持TLS 1.2
。
我的动机是在客户端删除对SSLv3
的支持,即使服务器支持它(我已经有一个powershell脚本在机器注册表中禁用它),并支持服务器支持的最高TLS协议。
< >强更新:
查看.NET 4.0
中的ServicePointManager
类,我没有看到TLS 1.0
和1.1
的枚举值。在这两个.NET 4.0/4.5
中,默认值是SecurityProtocolType.Tls|SecurityProtocolType.Ssl3
。希望这个默认值不会因为禁用注册表中的SSLv3
而被破坏
然而,我已经决定必须将所有应用程序升级到.NET 4.5
,并显式地将SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
添加到所有应用程序的所有引导代码中。
这将使对各种api和服务的出站请求不降级到SSLv3
,并且应该选择TLS
的最高级别。
这种方法听起来合理还是过份?我有许多应用程序要更新,我想在未来证明它们,因为我听说甚至TLS 1.0
可能在不久的将来被一些提供者弃用。
作为一个向api发出出站请求的客户端,在注册表中禁用SSL3会对.NET框架产生影响吗?我看到默认情况下,TLS 1.1和1.2没有启用,我们必须通过注册表启用它吗?http://support.microsoft.com/kb/245030。
经过一番研究,我相信注册表设置不会有任何影响,因为它们适用于IIS(服务器子密钥)和浏览器(客户端子密钥)。
对不起,这篇文章变成了多个问题,然后是“可能”的答案。