假设我有一个标准的.NET(4.5)Web应用程序需要使用TLS连接到安全服务器。
我想停止在我的服务器中支持未使用或弱的协议和密码套件,并且只支持客户端也支持的协议(最好是TLS 1.2)
使用的TLS(1.0,1.1或1.2)和 / 或密码套件的版本是否取决于操作系统或.NET版本?
换句话说,当我的.NET应用程序安装在具有不同操作系统/更新的计算机上时,它会使用不同的密码套件还是TLS版本?或者.NET 4.5的使用是否确保每个客户端 - 服务器通信上的协议都是相同的?
答案 0 :(得分:6)
Starting with .NET 4.7,.NET使用操作系统的默认值。
System.Net.Security.SslStream使用的TLS堆栈和HTTP,FTP和SMTP等上层组件允许开发人员使用操作系统支持的默认TLS协议。开发人员不再需要对TLS版本进行硬编码。
在4.7之前,您必须指定要与
明确使用的TLS版本ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
对于.NET 4.7,ServicePointManager.SecurityProtocol
(如果没有明确设置)现在返回SystemDefault
。
BTW最早支持的.NET版本是4.5.2。大多数系统都有较新的版本,但由其他应用程序或Windows Update安装。自4.0以来的每个版本都是以前的二进制替换。
答案 1 :(得分:4)
这是一个比我在.NET问题上写的更好的答案: https://stackoverflow.com/a/28333370/4148708
本质上:
.NET 4.0最多支持TLS 1.0,而.NET 4.5最多支持TLS 1.2
在实践中,我发现.NET 4.5和.NET 4.6默认为TLS 1.0,如果你不是必须的话:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
无法评论.NET 4.7,但我认为默认情况下它仍会握手TLS 1.0,因此整个互联网不会突然中断。
.NET 4.7使用whatever the OS default is through the SystemDefaultTlsVersions
registry key(感谢Panagiotis Kanavos) - 更多调查结果in this repo。
这对.NET 4.7来说意味着什么,ServicePointManager.SecurityProtocol
现在返回SystemDefault
。
在操作系统问题上,是的,.NET调用SCHANNEL,这是微软的安全支持提供商(想想Windows世界的" OpenSSL")。只要您在Windows Server 2008 R2 +上运行,就可以使用TLS 1.2。
摘自this comprehensive blog post (blogs.msdn.microsoft.com):