web-dev-qa-db-ja.com

ASP.NET Core 2.xでKestrelでHTTPS / SSLを使用する方法

現在、ASP.NET Core 2.xを使用していますが、以下のようにUseUrls()メソッドに配置するだけで、KestrelでHTTPS/SSLを使用できるようになりました。

var Host = new WebHostBuilder()
    .UseUrls("http://localhost", "https://111.111.111.111")
    .UseKestrel()
    .Build();

しかし、今私は例外を取得します:

 System.InvalidOperationException:
     HTTPS endpoints can only be configured using KestrelServerOptions.Listen().

ASP.NET Core 2.xでSSLを使用するようにKestrelを設定するにはどうすればよいですか?

41
Svek

基礎。サーバーURLを使用する

サーバー/ Webホストに割り当てられたすべてのIPアドレスを使用するようにサーバーを関連付ける場合は、次の操作を実行できます。

WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://localhost:5000", "http://*:80")
    .UseStartup<Startup>()
    .Build();

注:UseUrls()メソッドで使用される文字列形式はhttp://{ip address}:{port number}です。
-IPアドレスに*(アスタリスク)を使用する場合、それはホストで使用可能なすべてのIPアドレスを意味します。
-ポート番号は必須ではありません。空白のままにすると、デフォルトでポート80になります。

UseUrls()メソッドについては、 公式のMicrosoftドキュメントはこちらに詳細が追加されています。

ただし、SSLはUseUrls()methodでは機能しません---つまり、https://で始まるURLを追加しようとすると、プログラムは例外をスローします

System.InvalidOperationException:
    HTTPS endpoints can only be configured using KestrelServerOptions.Listen().

エンドポイント構成。 HTTPSを使用してSSL証明書をバインドする

HTTPSエンドポイントは、KestrelServerOptionsを使用してのみ構成できます。

Listenメソッドを使用してTCPソケットを使用する例を次に示します。

WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options =>
    {
        options.Listen(IPAddress.Loopback, 5000);  // http:localhost:5000
        options.Listen(IPAddress.Any, 80);         // http:*:80
        options.Listen(IPAddress.Loopback, 443, listenOptions =>
        {
            listenOptions.UseHttps("certificate.pfx", "password");
        });
    })
    .UseStartup<Startup>()
    .Build();

注:ListenメソッドとUseUrlsの両方を使用する場合、ListenエンドポイントはUseUrlsエンドポイントをオーバーライドします。

エンドポイントのセットアップに関する詳細情報を見つけることができます ここでは公式のMicrosoft Docs

IISを使用する場合、IISのURLバインディングは、ListenまたはUseUrlsのいずれかを呼び出して設定したバインディングをオーバーライドします。詳細については、「 ASP.NETコアモジュールの概要 」を参照してください。

54
Svek