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。

受影響的 API

HttpsConnectionAdapterOptions.SslProtocols