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.Tls11
to 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.
Zalecana akcja
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.