Dela via


Kestrel: Standardversioner av TLS-protokoll som stöds har ändrats

Kestrel använder nu systemets standardversioner av TLS-protokoll i stället för att begränsa anslutningar till TLS 1.1- och TLS 1.2-protokollen som tidigare.

Den här ändringen tillåter:

  • TLS 1.3 används som standard i miljöer som stöder det.
  • TLS 1.0 som ska användas i vissa miljöer (till exempel Windows Server 2016 som standard), vilket vanligtvis inte är önskvärt.

Mer information finns i problem med dotnet/aspnetcore#22563.

Version introducerad

5.0 Förhandsversion 6

Gammalt beteende

Kestrel krävde att anslutningarna använder TLS 1.1 eller TLS 1.2 som standard.

Nytt beteende

Med Kestrel kan operativsystemet välja det bästa protokollet att använda och blockera osäkra protokoll. HttpsConnectionAdapterOptions.SslProtocols nu är standardvärdet i SslProtocols.None stället för SslProtocols.Tls12 | SslProtocols.Tls11.

Orsak till ändringen

Ändringen gjordes för att stödja TLS 1.3 och framtida TLS-versioner som standard när de blir tillgängliga.

Såvida inte appen har en specifik anledning att inte göra det bör du använda de nya standardvärdena. Kontrollera att systemet är konfigurerat för att endast tillåta säkra protokoll.

Om du vill inaktivera äldre protokoll utför du någon av följande åtgärder:

  • Inaktivera äldre protokoll, till exempel TLS 1.0, systemomfattande med Windows-instruktionerna. Den är för närvarande aktiverad som standard i alla Windows-versioner.

  • Välj manuellt vilka protokoll som du vill stödja i kod enligt följande:

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

Tyvärr finns det inget API för att exkludera specifika protokoll.

Berörda API:er

HttpsConnectionAdapterOptions.SslProtocols