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

В настоящее время я использую ASP.NET ядро 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 ядро 2.x?

2 ответов


основы. Использование 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-сертификата

ВАЖНОЕ ПРИМЕЧАНИЕ:
Хостинг за общественные конечная точка через Kestrel (даже с SSL) не рекомендуется, и вы должны использовать такие технологии, как обратные прокси (например, Nginx или IIS) вместо того, чтобы подвергать Kestrel в дикой природе.
- - - вы можете прочитать больше об этом из официальные документы Microsoft здесь.

конечные точки 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, the Listen конечные точки переопределить UseUrls конечные точки.

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

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


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