Как использовать 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?
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
, Listen
конечные точки перекрывают UseUrls
конечные точки.
Вы можете найти более подробную информацию о настройке конечных точек здесь на официальных документах Microsoft.
Если вы используете IIS, привязки URL для IIS переопределяют любые привязки, которые вы установили, вызвав
Listen
или жеUseUrls
, Для получения дополнительной информации см. Введение в основной модуль ASP.NET.
Вам не нужно реализовывать https с помощью kestrel. Если вы используете приложение, которое требует https, оно, скорее всего, будет обращено в Интернет. Это означает, что вам нужно запустить kestrel за nginx или Apache, и один из них обработает запрос https для вас.