如何在 ASP.NET Core 2.x 中将 HTTPS / SSL 与 Kestrel 一起使用?

问题描述 投票:0回答:2

我目前正在使用 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?

ssl https asp.net-core-2.0 kestrel-http-server
2个回答
99
投票

基础知识。使用服务器 URL

如果您想关联您的服务器以使用分配给服务器/网络主机的所有 IP 地址,那么您可以执行以下操作:

WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://localhost:5000", "http://*:80")
    .UseStartup<Startup>()
    .Build();

注意:

UseUrls()
方法中使用的字符串格式为:
http://{ip address}:{port number}
.
- 如果您使用
*
(星号)作为 IP 地址,则表示主机上的所有可用 IP 地址。
- 端口号不是必需的。如果将其留空,它将默认为端口 80。

这里

官方 Microsoft 文档
有大量关于 UseUrls() 方法的更多详细信息。

但是,SSL 不适用于

UseUrls()
方法 --- 所以,这意味着如果您尝试添加以
https://
开头的 URL,程序将抛出异常

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

端点配置。使用 HTTPS 并绑定 SSL 证书

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
UseUrls
设置的任何绑定。有关更多信息,请参阅ASP.NET Core 模块简介


-1
投票

您不需要单独使用 kestrel 来实现 https。如果您正在运行需要 https 的应用程序,它很可能会面向互联网。这意味着您需要在 nginx 或 Apache 后面运行 kestrel,并让其中之一为您处理 https 请求。

© www.soinside.com 2019 - 2024. All rights reserved.