Kestrel:默认支持的 TLS 协议版本已更改
Kestrel 现在使用系统默认的 TLS 协议版本,而不是像以前一样将连接限制于 TLS 1.1 和 TLS 1.2 协议。
此更改允许:
- 在支持 TLS 1.3 的环境中默认使用它。
- 在某些环境(例如默认的 Windows Server 2016)中使用 TLS 1.0,但这通常不理想。
有关讨论,请参阅 dotnet/aspnetcore#22563。
引入的版本
5.0 预览版 6
旧行为
Kestrel 过去默认要求连接使用 TLS 1.1 或 TLS 1.2。
新行为
Kestrel 允许操作系统选择要使用的最佳协议,并阻止不安全的协议。 HttpsConnectionAdapterOptions.SslProtocols 现在默认为 SslProtocols.None
,而不是 SslProtocols.Tls12 | SslProtocols.Tls11
。
更改原因
进行此项更改是为了在 TLS 1.3 和未来的 TLS 版本可用时默认支持它们。
建议操作
应使用新的默认协议,除非应用有特定原因而不能使用它们。 验证你的系统是否配置为仅允许安全协议。
若要禁用旧协议,请执行以下操作之一:
参照 Windows 说明,在系统范围禁用旧的协议(如 TLS 1.0)。 目前所有 Windows 版本上都默认启用该协议。
在代码中手动选择要支持的协议,如下所示:
using System.Security.Authentication; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; public class Program { public static void Main(string[] args) => CreateHostBuilder(args).Build().Run(); public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(kestrelOptions => { kestrelOptions.ConfigureHttpsDefaults(httpsOptions => { httpsOptions.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; }); }); webBuilder.UseStartup<Startup>(); }); }
遗憾的是,没有用于排除特定协议的 API。
受影响的 API
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈