在不同操作系统上安装的.NET应用程序中使用了什么版本的TLS

Yoa*_*nda 3 .net ssl tls1.2

假设我有一个标准的.NET(4.5)Web应用程序需要使用TLS连接到安全服务器.

我想停止在我的服务器中支持未使用或弱的协议和密码套件,并且只支持客户端也支持的协议(最好是TLS 1.2)

使用的TLS(1.0,1.1或1.2)/密码套件的版本是否取决于操作系统或.NET版本?

换句话说,当我的.NET应用程序安装在具有不同操作系统/更新的计算机上时,它是否会使用不同的密码套件或TLS版本?或者.NET 4.5的使用是否确保每个客户端 - 服务器通信上的协议都是相同的?

Pan*_*vos 7

从.NET 4.7开始,.NET使用操作系统的默认值.

System.Net.Security.SslStream使用的TLS堆栈和HTTP,FTP和SMTP等上层组件允许开发人员使用操作系统支持的默认TLS协议.开发人员不再需要对TLS版本进行硬编码.

在4.7之前,您必须指定要明确使用的TLS版本

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Run Code Online (Sandbox Code Playgroud)

对于.NET 4.7,ServicePointManager.SecurityProtocol(如果没有显式设置)现在返回SystemDefault.

BTW最早支持的.NET版本是4.5.2.但是,大多数系统都有更新的版本,由其他应用程序或Windows Update安装.自4.0以来的每个版本都是以前的二进制替换.


evi*_*obu 6

这比我在.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
Run Code Online (Sandbox Code Playgroud)

无法评论.NET 4.7,但我认为默认情况下它仍可握手TLS 1.0,因此整个Internet不会突然中断。 .NET 4.7 通过SystemDefaultTlsVersions注册表项使用操作系统的默认值(感谢Panagiotis Kanavos)— 在此版本库中有更多发现。

真正的含义是ServicePointManager.SecurityProtocol现在返回.NET 4.7 SystemDefault

在操作系统问题上,是的,.NET调用了SCHANNEL,它是Microsoft的安全支持提供程序(以Windows世界的“ OpenSSL”为例)。只要您在Windows Server 2008 R2 +上运行,就适合使用TLS 1.2。

从此综合博客文章(blogs.msdn.microsoft.com)中摘录:

OS支持SCHANNEL TLS版本

一些进一步的研究(我自己的)在这里提供-

https://github.com/snobu/tls-negotiations