Kestrel : Les versions du protocole TLS prises en charge par défaut ont été modifiées

Kestrel utilise désormais les versions de protocole TLS par défaut du système au lieu de restreindre les connexions aux protocoles TLS 1.1 et TLS 1.2 comme il le faisait précédemment.

Cette modification permet à :

  • TLS 1.3 d’être utilisé par défaut dans les environnements qui le prennent en charge.
  • TLS 1.0 à utiliser dans certains environnements (comme Windows Server 2016 par défaut), ce qui n’est généralement pas souhaitable.

Pour plus d’informations, consultez le problème dotnet/aspnetcore#22563.

Version introduite

5.0 Préversion 6

Ancien comportement

Kestrel exigeait que les connexions utilisent TLS 1.1 ou TLS 1.2 par défaut.

Nouveau comportement

Kestrel permet au système d’exploitation de choisir le meilleur protocole à utiliser et de bloquer les protocoles non sécurisés. HttpsConnectionAdapterOptions.SslProtocols a la valeur par défaut SslProtocols.None au lieu de SslProtocols.Tls12 | SslProtocols.Tls11.

Raison du changement

La modification a été apportée pour prendre en charge TLS 1.3 et les versions ultérieures de TLS par défaut à mesure qu’elles deviennent disponibles.

À moins que votre application ait une raison spécifique de ne pas le faire, vous devez utiliser les nouvelles valeurs par défaut. Vérifiez que votre système est configuré pour autoriser uniquement les protocoles sécurisés.

Pour désactiver les protocoles plus anciens, effectuez l’une des actions suivantes :

  • Désactivez les protocoles plus anciens, comme TLS 1.0, à l’échelle du système avec les instructions Windows. Il est actuellement activé par défaut sur toutes les versions de Windows.

  • Sélectionnez manuellement les protocoles que vous souhaitez prendre en charge dans le code comme suit :

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

Malheureusement, il n’existe aucune API pour exclure des protocoles spécifiques.

API affectées

HttpsConnectionAdapterOptions.SslProtocols