在 .NET 控制台应用程序中为 Kestrel WebHost 构建器配置 SSL 证书

Configure SSL certificate for Kestrel WebHost builder In .NET Console App

我正在控制台应用程序中创建 ASP.NET Web API 端点,我需要将其托管为 Windows 服务。

现在一切正常,除了端点在 http 中。我想使用 https.

当我 运行 它通过 Visual Studio.

我相信 Kestrel 在 IIS 后面作为反向代理,并且 SSL 证书已经过验证。但是当我将它托管为 Windows 服务时。我在尝试到达端点时收到证书错误

这是我的 Kestrel WebHost 构建器

var configigurations = new ConfigurationBuilder()
                       .AddJsonFile("appsettings.json", optional: false)
                       .Build();
var host = new WebHostBuilder()
                .UseKestrel(options =>
                {
                    options.ListenAnyIP(443, listenOptions =>
                    {
                        listenOptions.UseHttps("sslcertificate.pfx", "ssl@123");
                    });
                })
                .UseUrls(config.ApiBaseUrl)
                .UseConfiguration(configigurations)
                .UseStartup<Startup>()
                .Build();
host.Run();

因为它 运行 作为 Windows 服务并公开 API,所以我不能依赖 IIS。我需要为 Kestrel 配置。

可是我怎么能

  1. 为本地主机生成 SSL(我正在使用 Windows)

  2. 如果我已经有一个生产中的 SSL 证书 (*.cert)。我如何在生产服务器上从它制作 *.pfx(证书 + RSA 私钥)(也 Windows)

  1. .Net Core(和.Net 5)捆绑了一个方便的工具来处理开发自签名证书。查看 dotnet dev-certs。命令是:
dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\aspnetapp.pfx -p crypticpassword
dotnet dev-certs https --trust

该文档还介绍了如何使用 PowerShell 或 openssl 执行相同的操作(如果您喜欢的话)

  1. 调查this question。简而言之,您可以通过从 Windows 证书存储中导出证书并选择“是,导出私钥”来自动启用 PFX 格式

这将创建一个证书

dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\aspnetapp.pfx -p crypticpassword

这将建立信任

dotnet dev-certs https --trust