Kestrel: 既定でサポートされている TLS プロトコル バージョンの変更

Kestrel では現在、以前のように TLS 1.1 プロトコルと TLS 1.2 プロトコルへの接続を制限するのではなく、システム既定の TLS プロトコル バージョンを使用します。

この変更で可能になること:

  • それをサポートする環境で TLS 1.3 を既定で使用できます。
  • TLS 1.0 を一部の環境 (既定の Windows Server 2016 など) で使用できます。通常、これは望ましくありません

ディスカッションについては、イシュー dotnet/aspnetcore#22563 を参照してください。

導入されたバージョン

5.0 Preview 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

HttpsConnectionAdapterOptions.SslProtocols