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

时间:2017-10-07 15:16:36

标签: ssl https asp.net-core-2.0 kestrel-http-server

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

2 个答案:

答案 0 :(得分:47)

基础知识。使用服务器URL

如果要将服务器关联以使用分配给服务器/ 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://

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

只能使用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绑定会覆盖您通过调用UseUrlsListen设置的所有绑定。有关详细信息,请参阅Introduction to ASP.NET Core Module

答案 1 :(得分:-1)

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