【发布时间】:2015-04-01 21:24:06
【问题描述】:
与支持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(服务器子项)和浏览器(客户端子项)。
抱歉,这篇帖子变成了多个问题,随后给出了“可能”的答案。
【问题讨论】:
-
仅供参考:有关 TLS 的最新最佳实践:docs.microsoft.com/en-us/dotnet/framework/network-programming/…
-
对于那些想看到这个问题的最佳答案的人,按投票排序!
-
相关 SO 问答:stackoverflow.com/questions/41618766/… 读者应该注意这个问题已经过时了,新的建议自 2020 年起已经到位。