Kestrel: Standardmäßig unterstützte TLS-Protokollversionen geändert

Kestrel verwendet jetzt die Standard-TLS-Protokollversionen des Systems, anstatt Verbindungen mit den TLS 1.1- und TLS 1.2-Protokollen wie bisher einzuschränken.

Diese Änderung ermöglicht Folgendes:

  • TLS 1.3 wird standardmäßig in Umgebungen verwendet, die diese unterstützen.
  • TLS 1.0 wird in einigen Umgebungen wie Windows Server 2016 (Standard) verwendet, was üblicherweise nicht wünschenswert ist.

Weitere Informationen finden Sie unter dem Issue dotnet/aspnetcore#22563.

Eingeführt in Version

Version 5.0 Vorschau 6

Altes Verhalten

Kestrel erforderte, dass Verbindungen standardmäßig TLS 1.1 oder TLS 1.2 verwenden.

Neues Verhalten

Kestrel ermöglicht dem Betriebssystem, das am besten geeignete Protokoll auszuwählen und unsichere Protokolle zu blockieren. Der Standardwert für HttpsConnectionAdapterOptions.SslProtocols ist nun SslProtocols.None statt SslProtocols.Tls12 | SslProtocols.Tls11.

Grund für die Änderung

Die Änderung sollte bewirken, dass TLS 1.3 und zukünftige TLS-Versionen standardmäßig unterstützt werden, sobald sie verfügbar sind.

Sofern in Ihrer Anwendung kein bestimmter Grund dagegen besteht, sollten Sie die neuen Standardwerte verwenden. Vergewissern Sie sich, dass Ihr System so konfiguriert ist, dass nur sichere Protokolle zulässig sind.

Führen Sie eine der folgenden Aktionen durch, um ältere Protokolle zu deaktivieren:

  • Deaktivieren Sie ältere Protokolle wie TLS 1.0 systemweit mithilfe der Anweisungen für Windows. Diese sind derzeit in allen Windows-Versionen standardmäßig aktiviert.

  • Wählen Sie die Protokolle, die Sie im Code unterstützen möchten, manuell wie folgt aus:

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

Leider gibt es keine API zum Ausschließen bestimmter Protokolle.

Betroffene APIs

HttpsConnectionAdapterOptions.SslProtocols