如何直接在Kestrel中使用PEM证书?

How to use PEM certificate in Kestrel directly?

我想在我的 ASP.Net Core 2.0(带有 Kestrel Web 服务器)应用程序中使用 HTTPS。

The official documentation使用pfx格式,但我想直接使用PEM格式(由Let's encrypt生成)无需任何转换(至少在我的 C# 代码之外没有任何内容)。有可能吗?

简短的回答是你不能。至少,你不能没有大量的工作或使用像 Bouncy Castle 这样的东西。

当证书和密钥一起放入 PFX 时,X509Certificate2 对象将具有 cert.HasPrivateKey == true,并且能够通过 Get[Algorithm]PrivateKey 扩展方法系列使用私钥。当您加载 PEM 证书时,仅加载 public 证书部分(如果它是粘有 PEM 密钥的 PEM 证书?那仍然只是 PEM 证书)。

获取与证书关联的私钥的简单方法是使用新的(在 .NET Core 2.0 中)certWithKey = cert.CopyWithPrivateKey(key) 扩展方法系列。所以现在你 "just" 需要加载私钥。 .NET 当前无法加载(或保存)“.key”文件(无论其扩展名是什么)。如果您想尝试加载一个,您可能需要查看一些现有技术:

  • How to parse(Convert to RSAParameters) X.509 private key in C#?

好消息是 .NET 计划在未来支持加载密钥 (https://github.com/dotnet/corefx/issues/20414),但由于它尚未完成(更不用说发布了),所以现在对您没有帮助.