Kestrel: изменены поддерживаемые по умолчанию версии протокола TLS

В Kestrel теперь используются стандартные версии протокола TLS, а не ограничивается лишь протоколами TLS 1.1 и TLS 1.2, как это было ранее.

Это изменение позволяет:

  • использовать протокол TLS 1.3 по умолчанию в средах, поддерживающих его;
  • использовать TLS 1.0 в некоторых средах (например, в Windows Server 2016 по умолчанию), в которых делать это обычно нежелательно.

Обсуждение этого вопроса см. на странице dotnet/aspnetcore#22563.

Представленные версии

5.0, предварительная версия 6

Старое поведение

Kestrel требовалось, чтобы для подключений по умолчанию использовался TLS 1.1 или TLS 1.2.

Новое поведение

Kestrel позволяет операционной системе выбрать наилучший протокол для использования и блокирования небезопасных протоколов. HttpsConnectionAdapterOptions.SslProtocols теперь по умолчанию использует SslProtocols.None вместо SslProtocols.Tls12 | SslProtocols.Tls11.

Причина изменения

Изменения были внесены для поддержки TLS 1.3 и будущих версий TLS по умолчанию по мере их появления.

Если к приложению не предъявляется особых требований, следует использовать новые значения по умолчанию. Убедитесь, что ваша система настроена на разрешение только безопасных протоколов.

Чтобы отключить старые протоколы, выполните одно из следующих действий.

  • Отключите более старые протоколы, такие как TLS 1.0, на уровне всей системы, руководствуясь инструкциями для Windows. В настоящее время он включен по умолчанию во всех версиях Windows.

  • Вручную выберите протоколы, которые требуется поддерживать в коде, следующим образом:

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

К сожалению, нет API для исключения конкретных протоколов.

Затронутые API

HttpsConnectionAdapterOptions.SslProtocols