如何获取带有私钥的证书的base64编码值?

7
作为之前问题的跟进,我有一些需要获得带有私钥的X509证书的代码。如答案中所述,在生产中,这将使用X509Store发生。
最好的单元测试方式是什么?我想使用与生产环境不同的不同证书进行开发和测试,因此我可以创建一个CertificateRepository接口来提供不同的实现。
对于测试/开发实现,最好只使用证书的base64编码字符串,并以这种方式创建证书实例,使用虚拟密码和专用测试/开发证书。然而,到目前为止,我无法弄清楚如何将带有私钥的证书编码为base64字符串。每次我尝试从MMC导出证书作为base-64时,它只会对公钥进行编码。

你如何创建证书? - Dmitry Shkuropatsky
使用 makecert.exe 工具创建,带有如下开关参数:-r -pe - danludwig
2个回答

13

我无法通过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存储中获取的证书具有私钥,它将最终出现在导出的字节数组中,然后您可以将其转换为base64字符串。

1

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

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


我已经尝试过了,但是它只允许我导出为 pkcs12 (.pfx) 格式。 - danludwig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接