Kestrel: Zmieniono domyślne obsługiwane wersje protokołu TLS

Usługa Kestrel używa teraz domyślnych wersji protokołu TLS systemu, a nie ogranicza połączeń z protokołami TLS 1.1 i TLS 1.2, tak jak wcześniej.

Ta zmiana umożliwia:

  • Protokół TLS 1.3 domyślnie używany w środowiskach, które go obsługują.
  • Protokół TLS 1.0 do użycia w niektórych środowiskach (np. Windows Server 2016 domyślnie), który zwykle nie jest pożądany.

Aby zapoznać się z dyskusją, zobacz problem dotnet/aspnetcore#22563.

Wprowadzona wersja

5.0 (wersja zapoznawcza 6)

Stare zachowanie

Usługa Kestrel wymaga, aby połączenia domyślnie używały protokołu TLS 1.1 lub TLS 1.2.

Nowe zachowanie

Kestrel umożliwia systemowi operacyjnemu wybór najlepszego protokołu do użycia i blokowanie niezabezpieczonych protokołów. HttpsConnectionAdapterOptions.SslProtocolsteraz wartość domyślna SslProtocols.Tls12 | SslProtocols.Tls11to SslProtocols.None zamiast .

Przyczyna wprowadzenia zmiany

Wprowadzono zmianę w celu obsługi protokołu TLS 1.3 i przyszłych wersji protokołu TLS domyślnie, gdy staną się one dostępne.

Jeśli aplikacja nie ma określonego powodu, należy użyć nowych wartości domyślnych. Sprawdź, czy system jest skonfigurowany tak, aby zezwalał tylko na bezpieczne protokoły.

Aby wyłączyć starsze protokoły, wykonaj jedną z następujących czynności:

  • Wyłącz starsze protokoły, takie jak TLS 1.0, dla całego systemu za pomocą instrukcji systemu Windows. Jest ona obecnie domyślnie włączona we wszystkich wersjach systemu Windows.

  • Ręcznie wybierz protokoły, które mają być obsługiwane w kodzie w następujący sposób:

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

Niestety, nie ma interfejsu API do wykluczania określonych protokołów.

Dotyczy interfejsów API

HttpsConnectionAdapterOptions.SslProtocols