如何在ASP.NET Core 2.x中使用带有Kestrel的HTTPS/SSL?

Sve*_*vek 42 ssl https kestrel-http-server asp.net-core-2.0

我目前正在使用ASP.NET Core 2.x,我曾经能够让Kestrel使用HTTPS/SSL,只需将其放入UseUrls()方法中即可:

var host = new WebHostBuilder()
    .UseUrls("http://localhost", "https://111.111.111.111")
    .UseKestrel()
    .Build();
Run Code Online (Sandbox Code Playgroud)

但现在我得到了例外:

 System.InvalidOperationException:
     HTTPS endpoints can only be configured using KestrelServerOptions.Listen().
Run Code Online (Sandbox Code Playgroud)

如何配置Kestrel在ASP.NET Core 2.x中使用SSL?

Sve*_*vek 64

基础.使用服务器URL

如果要将服务器关联以使用分配给服务器/ Web主机的所有IP地址,则可以执行以下操作:

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

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

这里的官方Microsoft Docs上有关于该UseUrls()方法的大量额外细节.

但是,SSL不适用于该 UseUrls() 方法 ---因此,这意味着如果您尝试添加以https://程序开头的URL 将抛出异常

System.InvalidOperationException:
    HTTPS endpoints can only be configured using KestrelServerOptions.Listen().
Run Code Online (Sandbox Code Playgroud)

端点配置.使用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();
Run Code Online (Sandbox Code Playgroud)

注意:如果同时使用Listen方法和端点UseUrls,则Listen端点将覆盖UseUrls端点.

您可以在官方Microsoft Docs中找到有关设置端点的更多信息.

如果使用IIS,则IIS的URL绑定将覆盖您通过调用Listen或设置的任何绑定UseUrls.有关更多信息,请参见ASP.NET核心模块简介.

  • Kestrel for ASP.NET Core 2对于公共端点来说足够安全.用于ASP.NET Core 1的Kestrel不是. (6认同)
  • @Anttu:前往https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x#when-to-use-kestrel-with-a-reverse-proxy,并且在2.0和1.1标签之间切换. (3认同)
  • @robrich此语句有参考吗? (2认同)