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 для исключения конкретных протоколов.