Как использовать HTTPS/SSL с Kestrel в ASP.NET Core 2.x?

В настоящее время я использую ASP.NET Core 2.x, и я использовал, чтобы Kestrel мог использовать HTTPS/SSL, просто поместив его в метод UseUrls() следующим образом:

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().

Как настроить Kestrel для использования SSL в ASP.NET Core 2.x?

Ответ 1

Основы. Использование URL-адресов сервера

Если вы хотите связать свой сервер с использованием всех 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() метод --- так, это означает, что если вы пытаетесь добавить URL, начинающиеся с https:// программа будет бросать исключение

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

Конечная точка конфигурации. Использование HTTPS и привязка SSL-сертификата

Конечные точки HTTPS могут быть настроены только с использованием KestrelServerOptions.

Вот пример использования TCP-сокетов с использованием метода Listen:

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 точки UseUrls.

Вы можете найти более подробную информацию о настройке конечных точек здесь на официальных документах Microsoft.

Если вы используете IIS, привязки URL для IIS переопределяют любые привязки, которые вы установили, вызывая Listen или UseUrls. Для получения дополнительной информации см. Введение в основной модуль ASP.NET.

Ответ 2

Вам не нужно использовать https с пустельгой. Если вы используете приложение, требующее https, скорее всего, он будет обращен наружу в Интернет. Это означает, что вам нужно запустить пустельгу за nginx или Apache, и один из них обрабатывает запрос https для вас.