自托管 ASP.NET 核心应用不适用于 SSL

Self hosted ASP.NET Core app does not work with SSL

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

dotnet new

并尝试 运行 它使用命令:

dotnet run

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

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

dotnet run

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

现在的问题是,如何使用 Kestrel 运行 我的 ASP.NET Core 申请超过 https

我在 Dot Net Core 2.2Visual Studio 2019

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

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

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

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

  1. 添加 Certificates snap-in 到管理控制台。
  2. 浏览 Personal\Certifcates
  3. 右键单击您新创建的证书,然后从 "all tasks"、select "export"
  4. Select 表示的选项:"Yes, export the private key"
  5. 您会看到 pfx 自动 selected。单击 "Next"
  6. 设置密码和保存位置。
  7. 您已完成创建 pfx 文件

下一步是配置 ASP.NET 核心以使用 :

中描述的 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 创建的证书。这也可以在管理控制台中使用。

当您 运行 ASP.NET Core 在开发模式下使用 dotnet run 或来自 Visual Studio 时,则已经 built-in 支持开发允许您立即使用 HTTPS 支持进行开发的证书。

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

dotnet dev-certs https --trust

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

请注意,开发证书仅在开发期间适用,当然您稍后需要为生产设置适当的证书。当然,它的工作方式取决于您稍后将如何托管该应用程序。 hosting chapter.

中介绍了不同的选项以及如何配置 SSL