跟进previous question,我有一些代码需要获得带私钥的X509证书。如答案中所述,在生产中,这将使用X509Store发生。
对此进行单元测试的最佳方法是什么?我想使用不同于生产的证书来开发和测试,因此我可以创建一个CertificateRepository接口来提供不同的实现。
对于测试/ dev实现,最好只使用base64编码的证书字符串,然后使用虚拟密码和专用测试/开发证书创建一个证书实例。但到目前为止,我一直无法弄清楚如何使用私钥作为base64字符串对证书进行编码。每次我尝试从MMC导出证书作为base-64时,它只对公钥进行编码。
答案 0 :(得分:9)
我无法弄清楚如何用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字符串。
答案 1 :(得分:0)
确保在将证书添加到商店时将私钥标记为可导出。
如果您使用 makecert 创建证书,请添加 -pe 选项以使私钥可导出。