Freigeben über


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

Kestrel verwendet nun die standardmäßigen TLS-Protokollversionen des Systems, anstatt Verbindungen mit den TLS 1.1- und TLS 1.2-Protokollen wie zuvor einzuschränken.

Diese Änderung ermöglicht Folgendes:

  • TLS 1.3 wird standardmäßig in Umgebungen verwendet, die es unterstützen.
  • TLS 1.0, das in einigen Umgebungen verwendet werden soll (z. B. Windows Server 2016 standardmäßig), was in der Regel nicht wünschenswert ist.

Weitere Diskussionen finden Sie unter dotnet/aspnetcore#22563.

Eingeführt in Version

5.0 Vorschau 6

Altes Verhalten

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

Neues Verhalten

Kestrel ermöglicht dem Betriebssystem, das beste Zu verwendende Protokoll auszuwählen und unsichere Protokolle zu blockieren. HttpsConnectionAdapterOptions.SslProtocols wird nun standardmäßig auf SslProtocols.None anstelle von SslProtocols.Tls12 | SslProtocols.Tls11 gesetzt.

Grund für Änderung

Die Änderung wurde vorgenommen, um TLS 1.3 und zukünftige TLS-Versionen standardmäßig zu unterstützen, sobald sie verfügbar sind.

Sofern Ihre App keinen bestimmten Grund hat, diese nicht zu nutzen, sollten Sie die neuen Standardwerte verwenden. Überprüfen Sie, ob Ihr System so konfiguriert ist, dass nur sichere Protokolle zulässig sind.

Um ältere Protokolle zu deaktivieren, führen Sie eine der folgenden Aktionen aus:

  • Deaktivieren Sie ältere Protokolle, z. B. TLS 1.0, systemweit mit den Windows-Anweisungen. Sie ist derzeit in allen Windows-Versionen standardmäßig aktiviert.

  • Wählen Sie manuell aus, welche Protokolle im Code wie folgt unterstützt werden sollen:

    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, um bestimmte Protokolle auszuschließen.

Betroffene APIs

HttpsConnectionAdapterOptions.SslProtocols