Sdílet prostřednictvím


Kestrel: Změna výchozích podporovaných verzí protokolu TLS

Kestrel teď používá výchozí verze protokolu TLS systému místo omezení připojení k protokolům TLS 1.1 a TLS 1.2, jako tomu bylo dříve.

Tato změna umožňuje:

  • Protokol TLS 1.3, který se má používat ve výchozím nastavení v prostředích, která ho podporují.
  • Protokol TLS 1.0, který se má používat v některých prostředích (jako je Windows Server 2016 ve výchozím nastavení), což obvykle není žádoucí.

Diskuzi najdete v tématu problému dotnet/aspnetcore#22563.

Zavedená verze

5.0 Preview 6

Staré chování

Kestrel vyžaduje, aby připojení ve výchozím nastavení používala protokol TLS 1.1 nebo TLS 1.2.

Nové chování

Kestrel umožňuje operačnímu systému zvolit nejlepší protokol, který se má použít, a blokovat nezabezpečené protokoly. HttpsConnectionAdapterOptions.SslProtocols nyní je výchozí hodnota SslProtocols.None namísto SslProtocols.Tls12 | SslProtocols.Tls11.

Důvod změny

Změna byla provedena tak, aby podporovala protokol TLS 1.3 a budoucí verze PROTOKOLU TLS ve výchozím nastavení, jakmile budou k dispozici.

Pokud vaše aplikace nemá konkrétní důvod, proč tomu tak není, měli byste použít nové výchozí hodnoty. Ověřte, že je váš systém nakonfigurovaný tak, aby umožňoval pouze zabezpečené protokoly.

Pokud chcete zakázat starší protokoly, proveďte jednu z následujících akcí:

  • Pomocí pokynů pro Windows zakažte starší protokoly, jako je TLS 1.0. Ve všech verzích Windows je teď ve výchozím nastavení povolená.

  • Ručně vyberte protokoly, které chcete v kódu podporovat, následujícím způsobem:

    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>();
                });
    }
    

Bohužel neexistuje žádné rozhraní API, které by vyloučilo konkrétní protokoly.

Ovlivněná rozhraní API

HttpsConnectionAdapterOptions.SslProtocols