我目前正在使用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在ASP.NET Core 2.x中使用SSL?
答案 0 :(得分:47)
如果要将服务器关联以使用分配给服务器/ Web主机的所有IP地址,则可以执行以下操作:
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:5000", "http://*:80")
.UseStartup<Startup>()
.Build();
注意:UseUrls()
方法中使用的字符串格式为:http://{ip address}:{port number}
- 如果您使用*
(星号)作为IP地址,则表示主机上的所有可用IP地址。
- 端口号不是必需的。如果将其留空,则默认为端口80。
the official Microsoft Docs here上的UseUrls()
方法有很多其他详细信息。
但是, SSL无法使用
UseUrls()
方法 ---因此,这意味着如果您尝试添加以{{1}开头的网址程序将抛出异常https://
只能使用System.InvalidOperationException:
HTTPS endpoints can only be configured using KestrelServerOptions.Listen().
配置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
个端点。
您可以找到有关设置端点here at the official Microsoft Docs的更多信息。
如果您使用IIS,则IIS的URL绑定会覆盖您通过调用
UseUrls
或Listen
设置的所有绑定。有关详细信息,请参阅Introduction to ASP.NET Core Module。
答案 1 :(得分:-1)
您无需单独使用kestrel实施https。如果您运行的是需要https的应用程序,则很可能会面向互联网。这意味着您需要在nginx或Apache后面运行kestrel,并让其中一个为您处理https请求。