在 .Net Core 控制台应用程序中生成受信任的自签名证书

Posted

技术标签:

【中文标题】在 .Net Core 控制台应用程序中生成受信任的自签名证书【英文标题】:Generate Trusted Self-Signed Certificate in .NetCore Console Application 【发布时间】:2019-04-14 22:29:38 【问题描述】:

我正在尝试为 localhost 生成受信任的自签名证书。此证书将用于控制台应用程序内的自托管 Web API。由于该项目的要求,必须信任 localhost 连接,并且应用程序将安装在客户端 PC 上,这意味着必须以编程方式生成证书。

我已经设法在 .Net Framework 中做到了这一点,而且一切似乎都 100% 正常工作,但是一旦我将它移到 .NetCore 上,我就碰壁了。我对 .NetCore 还很陌生,所以我的知识非常有限。

我正在使用 Bouncy Castle 生成证书,但由于某种原因,当我尝试在 .NetCore 中为自签名证书分配私钥时,我收到“System.PlatformNotSupportedException: 'Operation is not supported on this平台。”例外。当我尝试使用“DotNetUtilities.ToRSA(rsaparams)”将 RsaPrivateCrtKeyParameters 转换为 PrivateKey 时会发生此异常。

我按照此链接“Generate self signed certificate on the fly”上的确切答案。

由于我对 .NetCore 的了解非常有限,如果有人能指出我正确的方向,我将不胜感激。

【问题讨论】:

【参考方案1】:

具体问题是.NET Core不支持cert.PrivateKey上的setter。

最接近的模拟是cert.CopyWithPrivateKey,但代码不同。而不是

cert.PrivateKey = key;
return cert;

你需要更多类似的东西

return cert.CopyWithPrivateKey(key);

因为 CopyWithPrivateKey 创建了一个新的 X509Certificate2 对象,而目标对象保持不变。

FWIW,您现在可以在没有额外依赖项的情况下完成整个证书创建,如 Generate and Sign Certificate Request using pure .net Framework 所示。

【讨论】:

成功了,非常感谢! :) 那么现在唯一的事情是我在尝试浏览到自托管 Web api 时得到一个“ERR_CERT_COMMON_NAME_INVALID”。在生成证书时,我的通用名称设置为根证书的“CN=My Company Name”和自签名证书的“CN=127.0.0.1”。你知道我做错了什么吗? @Ruan Chrome 不使用通用名称进行匹配。您需要为您的子证书构建主题备用名称条目(使用 127.0.0.1 作为 IPAddress 条目,而不是 DNSName 条目)

以上是关于在 .Net Core 控制台应用程序中生成受信任的自签名证书的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX GET 在缓存页面中生成受 CSRF 保护的表单

如何将SSL证书设置成受信任的证书

技术帖 | 在 Azure 应用服务中生成 .NET Core 和 SQL 数据库 Web 应用

.NET Core 中生成验证码

asp.net core 2.0 中的 WCF - 无法为具有权限的 SSL/TLS 安全通道建立信任关系

使用路由值在 .net core api 中生成 url 链接