关于c#:如何使用私钥获取证书的base 64编码值?

How to get the base 64 encoded value of a certificate with private key?

跟进上一个问题,我有一些代码需要使用私钥获取X509证书。如答案中所述,在生产中,这将使用X509Store。

单元测试的最佳方法是什么?我希望使用与生产中不同的证书来开发和测试,因此我可以创建一个证书存储接口来提供不同的实现。

对于测试/dev实现,最好只使用证书的base64编码字符串,然后用一个伪密码和专用的测试/dev证书以这种方式创建一个cert实例。然而,到目前为止,我还无法弄清楚如何用私钥将证书编码为base64字符串。每次我尝试将证书从mmc导出为base-64时,它只对公钥进行编码。


我想不出怎么用微型记忆卡。不过,我确实在代码中找到了如何做到这一点:

1
2
3
4
5
6
7
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();

只要您从X509存储中获得的证书具有私钥,它将以导出的字节arrray结束,然后您可以将其转换为base64字符串。


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

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