关于ssl:在不同操作系统上安装的.NET应用程序中使用了哪个版本的TLS

What version of TLS is used in a .NET application installed on different operating systems

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

我想停止支持未或弱密码套房的协议与服务器和客户端的支持,其中一只(最好是支持TLS 1.2)

这一版本的TLS 1.0,1.1和1.2)和/或使用密码套房depend on the或。NET版本的操作系统吗?

换句话说,我想使用一个不同的.NET应用程序的密码套件或TLS版本安装在不同的机器,当操作系统/更新?在使用或不ensures .NET 4.5,在每一个客户端服务器通信协议将是相同的吗?


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

The TLS stack, which is used by System.Net.Security.SslStream and up-stack components such as HTTP, FTP, and SMTP, allows developers to use the default TLS protocols supported by the operating system. Developers need no longer hard-code a TLS version.

在4.7之前,必须指定要显式使用的TLS版本

1
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

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

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


这是一个比我在.NET问题上写的更好的答案:https://stackoverflow.com/a/28333370/4148708

本质上:

.NET 4.0 supports up to TLS 1.0 while .NET 4.5 supports up to TLS 1.2

在实践中,我看到.NET 4.5和.NET 4.6都默认为TLS 1.0,如果您不需要这样做:

1
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

can't comment on.NET 4.7 but I would assumed it still handshakes tls 1.0 by default so the whole internet does not break..NET 4.7通过SystemDefaultTlsVersions注册表项使用任何操作系统默认值(感谢Panagiotis Kanavos),在本报告中有更多发现。

这实际上意味着对于.NET 4.7,ServicePointManager.SecurityProtocol现在返回SystemDefault

在操作系统问题上,是的,.NET调用了Schannel,这是微软的安全支持提供商(想想Windows世界的"openssl")。只要您在Windows Server 2008 R2+上运行,就可以使用TLS 1.2。

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

SCHANNEL TLS version support by OS

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

https://github.com/snobu/tls-谈判