问题描述
我正在控制台应用程序中创建一个 ASP.NET WebAPI 端点,我需要将其作为 Windows 服务托管。 现在一切正常,除了端点在 http 中。我想使用 https。
当我通过 VisualStudio 运行它时。 我相信 kestral 在 IIS 后面作为反向代理和 SSL 证书进行验证。但是当我将它托管为 Windows 服务时。我在尝试到达端点时收到证书错误
这是我的 kestral 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。我需要为 kestral 进行配置。
可是我怎么办
- 为本地主机生成 SSL(我使用的是 Windows)
- 如果我已经在生产中使用 SSL 证书 (*.cert)。我如何在生产服务器(也是 Windows)上使用它制作 *.pfx(证书 + RSA 私钥)
解决方法
- .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 执行相同的操作(如果这是您的风格)
- 查看this question。简而言之,您可以通过从 Windows 证书存储中导出证书并选择自动启用 PFX 格式的“是,导出私钥”来实现这一点
这将创建一个证书
dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\aspnetapp.pfx -p crypticpassword
这将建立信任
dotnet dev-certs https --trust