自托管 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.2
和 Visual Studio 2019
似乎 IIS Express
在幕后做了一些工作,其中包括 SSL
认证的配置。因此,我专注于 ASP.NET Core
的内部托管组件,即 Kestrel
。
首先,我借助以下命令使用 PowerShell
创建了 SSL 证书:
New-SelfSignedCertificate -DnsName localhost -CertStoreLocation "cert:\LocalMachine\My"
这个命令创建了一个证书,我可以通过 management console / certificates
程序看到它。有关详细信息,请参阅 this。创建新证书后,您需要将其导出为 pfx
文件。要在管理控制台中执行此操作,请使用以下步骤:
- 添加
Certificates
snap-in 到管理控制台。
- 浏览
Personal\Certifcates
- 右键单击您新创建的证书,然后从 "all tasks"、select "export"
- Select 表示的选项:"Yes, export the private key"
- 您会看到
pfx
自动 selected。单击 "Next"
- 设置密码和保存位置。
- 您已完成创建 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
我使用命令行创建了一个示例 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.2
和 Visual Studio 2019
似乎 IIS Express
在幕后做了一些工作,其中包括 SSL
认证的配置。因此,我专注于 ASP.NET Core
的内部托管组件,即 Kestrel
。
首先,我借助以下命令使用 PowerShell
创建了 SSL 证书:
New-SelfSignedCertificate -DnsName localhost -CertStoreLocation "cert:\LocalMachine\My"
这个命令创建了一个证书,我可以通过 management console / certificates
程序看到它。有关详细信息,请参阅 this。创建新证书后,您需要将其导出为 pfx
文件。要在管理控制台中执行此操作,请使用以下步骤:
- 添加
Certificates
snap-in 到管理控制台。 - 浏览
Personal\Certifcates
- 右键单击您新创建的证书,然后从 "all tasks"、select "export"
- Select 表示的选项:"Yes, export the private key"
- 您会看到
pfx
自动 selected。单击 "Next" - 设置密码和保存位置。
- 您已完成创建 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