Kestrel: versioni predefinite del protocollo TLS supportate modificate

Kestrel ora usa le versioni predefinite del protocollo TLS di sistema anziché limitare le connessioni ai protocolli TLS 1.1 e TLS 1.2 come in precedenza.

Questa modifica consente:

  • Uso di TLS 1.3 per impostazione predefinita in ambienti che lo supportano.
  • Uso di TLS 1.0 in alcuni ambienti, ad esempio Windows Server 2016 per impostazione predefinita, che in genere è non auspicabile.

Per informazioni, vedere il problema dotnet/aspnetcore#22563.

Versione introdotta

5.0 Preview 6

Comportamento precedente

Kestrel richiedeva che le connessioni usassero TLS 1.1 o TLS 1.2 per impostazione predefinita.

Nuovo comportamento

Kestrel consente al sistema operativo scegliere il protocollo ottimale da usare e di bloccare i protocolli non sicuri. L'impostazione predefinita per HttpsConnectionAdapterOptions.SslProtocols è ora SslProtocols.None anziché SslProtocols.Tls12 | SslProtocols.Tls11.

Motivo della modifica

La modifica è stata apportata per supportare TLS 1.3 e le versioni future di TLS per impostazione predefinita non appena diventano disponibili.

A meno che l'app non abbia un motivo specifico per non farlo, è consigliabile usare le nuove impostazioni predefinite. Verificare che il sistema sia configurato per consentire solo protocolli sicuri.

Per disabilitare i protocolli meno recenti, eseguire una delle azioni seguenti:

  • Disabilitare i protocolli meno recenti, ad esempio TLS 1.0, a livello di sistema con le istruzioni di Windows. È attualmente abilitato per impostazione predefinita in tutte le versioni di Windows.

  • Selezionare manualmente i protocolli da supportare nel codice come indicato di seguito:

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

Sfortunatamente non esiste alcuna API per escludere protocolli specifici.

API interessate

HttpsConnectionAdapterOptions.SslProtocols