如何获取带有私钥的证书的基64编码值

本文关键字:私钥 证书 编码值 何获取 获取 | 更新日期: 2023-09-27 18:20:13

继上一个问题之后,我有一些代码需要获得带有私钥的X509证书。如答案中所述,在生产中,这将使用X509Store实现。

单元测试的最佳方式是什么?我想使用与生产中不同的证书进行开发和测试,这样我就可以创建CertificateDepository接口来提供不同的实现。

对于test/dev实现,最好只使用一个base64编码的证书字符串,并以这种方式创建一个证书实例,使用一个伪密码和专用的test/dev证书。然而,到目前为止,我还不知道如何将带有私钥的证书编码为base64字符串。每次我试图将MMC中的证书导出为base-64时,它只对公钥进行编码。

如何获取带有私钥的证书的基64编码值

我无法弄清楚如何使用mmc来实现这一点。然而,我确实弄清楚了如何在代码中做到这一点:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, 
    "BLABLABLA", false)[0]; // doesn't matter how you get the cert
var exported = certificate.Export(X509ContentType.Pfx, "the password");
var base64 = Convert.ToBase64String(exported);
store.Close();

只要您从x 509存储中获得的证书具有私钥,它就会最终出现在导出的字节arrray中,然后您可以将其转换为base64字符串。

在将证书添加到存储区时,请确保将私钥标记为可导出。

如果使用makecert创建证书,请添加-pe选项以使私钥可导出。