首页 文章

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

提问于
浏览
2

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

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

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

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

2 回答

  • 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以来的每个版本都是以前的二进制替换 .

  • 3

    这是一个比我在.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 .

    在OS问题上,是的,.NET调用SCHANNEL,这是在Windows Server 2008 R2上运行的Microsoft 's Security Support Provider (think the 1407667 of the Windows world). As long as you',你对TLS 1.2很有用 .

    摘自this comprehensive blog post (blogs.msdn.microsoft.com)

    SCHANNEL TLS version support by OS

相关问题