Kestrel: 지원되는 기본 TLS 프로토콜 버전 변경됨
이제 Kestrel에서는 이전과 같이 TLS 1.1 및 TLS 1.2 프로토콜로 연결을 제한하는 대신 시스템의 기본 TLS 프로토콜 버전을 사용합니다.
이 변경을 통해 다음이 가능합니다.
- 환경에서 지원하는 경우 기본적으로 TLS 1.3이 사용됩니다.
- 일부 환경(기본적으로 Windows Server 2016 등)에서는 TLS 1.0이 사용됩니다. 일반적으로 바람직하지는 않습니다.
자세한 내용은 이슈 dotnet/aspnetcore#22563을 참조하세요.
도입된 버전
5.0 미리 보기 6
이전 동작
Kestrel에서 기본적으로 연결에 TLS 1.1 또는 TLS 1.2를 사용해야 했습니다.
새 동작
Kestrel에서 운영 체제가 사용할 최적의 프로토콜을 선택하고 안전하지 않은 프로토콜을 차단할 수 있습니다. HttpsConnectionAdapterOptions.SslProtocols가 이제 기본적으로 SslProtocols.Tls12 | SslProtocols.Tls11
이 아니라 SslProtocols.None
으로 설정됩니다.
변경 이유
TLS 1.3 및 향후 TLS 버전을 사용할 수 있게 되면 이를 기본적으로 지원하기 위해 변경되었습니다.
권장 작업
앱에 특별한 이유가 없는 한 새 기본값을 사용해야 합니다. 시스템이 보안 프로토콜만 허용하도록 구성되어 있는지 확인합니다.
이전 프로토콜을 사용하지 않도록 설정하려면 다음 작업 중 하나를 수행합니다.
시스템 전체에서 Windows 명령을 사용하여 TLS 1.0과 같은 이전 프로토콜을 사용하지 않도록 설정합니다. 현재는 모든 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
.NET