与支持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(服务器子键)和浏览器(客户端子键)。
很抱歉,这篇文章变成了多个问题,接着是“可能”的答案。