我目前正在使用 ASP.NET Core 2.x,过去我只需将 Kestrel 放入
UseUrls()
方法中即可使用 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().
如何配置 Kestrel 以在 ASP.NET Core 2.x 中使用 SSL?
如果您想关联您的服务器以使用分配给服务器/网络主机的所有 IP 地址,那么您可以执行以下操作:
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:5000", "http://*:80")
.UseStartup<Startup>()
.Build();
注意:
UseUrls()
方法中使用的字符串格式为:http://{ip address}:{port number}
.*
(星号)作为 IP 地址,则表示主机上的所有可用 IP 地址。这里
官方 Microsoft 文档有大量关于
UseUrls()
方法的更多详细信息。
但是,SSL 不适用于
方法 --- 所以,这意味着如果您尝试添加以UseUrls()
开头的 URL,程序将抛出异常https://
System.InvalidOperationException: HTTPS endpoints can only be configured using KestrelServerOptions.Listen().
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 文档找到有关设置端点的更多信息。
如果您使用 IIS,IIS 的 URL 绑定将覆盖您通过调用
或Listen
设置的任何绑定。有关更多信息,请参阅ASP.NET Core 模块简介。UseUrls
您不需要单独使用 kestrel 来实现 https。如果您正在运行需要 https 的应用程序,它很可能会面向互联网。这意味着您需要在 nginx 或 Apache 后面运行 kestrel,并让其中之一为您处理 https 请求。