自托管的ASP.NET Core应用不适用于SSL

时间:2019-07-10 15:44:30

标签: asp.net-core https kestrel

我已经使用命令行创建了一个示例ASP.NET Core应用程序:

dotnet new

并尝试使用命令运行它:

dotnet run

但是,在浏览器中打开URL时,它抱怨SSL无效。

我可以使用Visual Studio完整版运行该程序,没有任何问题,但是不能使用命令行运行该程序:

dotnet run

似乎由命令Kestrel运行的dotnet run需要额外的配置。

现在,问题是如何使用ASP.NET Corehttps上运行Kestrel应用程序?

我在Dot Net Core 2.2Visual Studio 2019

2 个答案:

答案 0 :(得分:0)

似乎IIS Express在后​​台进行了一些工作,其中包括配置SSL认证。因此,我专注于ASP.NET Core的内部托管组件Kestrel

首先,借助此命令,我使用PowerShell创建了SSL证书:

New-SelfSignedCertificate -DnsName localhost -CertStoreLocation "cert:\LocalMachine\My"

此命令创建一个证书,我可以通过management console / certificates程序看到它。有关更多信息,请参见this。创建新证书后,需要将其导出为pfx文件。为此,请在管理控制台中使用以下步骤:

  1. Certificates管理单元添加到管理控制台。
  2. 通过Personal\Certifcates导航
  3. 右键单击您新创建的证书,然后从“所有任务”中选择“导出”
  4. 选择以下选项:“是,导出私钥”
  5. 您会看到pfx被自动选中。点击“下一步”
  6. 设置密码和保存位置。
  7. 创建pfx文件已完成

下一步是将ASP.NET Core配置为使用here描述的pfx文件:

public static IWebHost BuildWebHost(string[] args) =>
 WebHost.CreateDefaultBuilder(args)
 .UseStartup < Startup > ()
 .UseKestrel((hostingContext, options) => 
 { 
  if (hostingContext.HostingEnvironment.IsDevelopment) {
   options.Listen(IPAddress.Loopback, 9001);
   options.Listen(IPAddress.Loopback, 9002, listenOptions => {
    listenOptions.UseHttps("certificate.pfx", "password");
   });
  }

 })
 .Build();

现在,该问题应已解决。如果不是,请尝试使用IIS Express创建的证书。在管理控制台中也可以使用。

答案 1 :(得分:0)

使用dotnet run或从Visual Studio在开发模式下运行ASP.NET Core时,已经内置了对开发证书的支持,该证书可让您立即使用HTTPS支持进行开发。 / p>

开发证书是.NET Core SDK内置的,通常,当您第一次运行.NET Core SDK时,它应该自行设置。如果这样不起作用,或者由于某种原因您丢失了开发证书,那么以后可以随时使用以下命令安装它:

dotnet dev-certs https --trust

此部分在官方文档的“Enforcing SSL” chapter中也有描述。

请注意,开发证书仅在开发期间适用,当然您需要为以后的生产设置适当的证书。当然,如何工作取决于您以后如何托管应用程序。 hosting chapter涵盖了不同的选项以及如何配置SSL。