Kestrel:預設支援的 TLS 通訊協定版本已變更
現在 Kestrel 使用系統預設的 TLS 通訊協定版本,而非先前受限於 TLS 1.1 和 TLS 1.2 通訊協定的連線。
這項變更能允許:
- 在支援的環境中預設使用 TLS 1.3。
- 在部分環境中使用 TLS 1.0 (例如預設的 Windows Server 2016),但此選項通常並不實用 。
如需討論,請參閱問題 dotnet/aspnetcore#22563 。
導入的版本
5.0 Preview 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。