我正在进行一些RSA加密/解密单元测试,我的所有功能都需要一些证书。我正在使用依赖注入这些证书,所以对于我的单元测试,我想获得一些示例虚拟(但功能)证书来测试我的加密/解密库。我想通过在单元测试的SetUp方法中硬编码有效证书的RawData来做到这一点。
在哪里可以找到这样的东西放入我的单元测试'SetUp方法?或者我如何创建它并拉出这个“原始数据”?我不确定这个“RawData”到底是什么。如果某人有在线发布的内容(这显然是不安全的,这对于我的单元测试目的来说是好的),那将是更好的(从懒惰的角度来看)但我很好地生成证书并提取这些数据。
答案 0 :(得分:2)
当X509Certificate2中有私钥时,您可以致电:
var certBytes = certificateWithPrivateKey.Export(X509ContentType.Pkcs12);
返回类似于.RawData的byte [],但保留私钥。 要将其存储在单元测试中,您可以将const字符串作为该数据的Base64。您可以从中获得:
var certAsString = Convert.ToBase64String(certBytes);
您可以通过使用它构建X509Certificate2来从此字节[]恢复密钥:
var certificateCopy = new X509Certificate2(certBytes);
// Or from the string:
var certificateCopy2 = new X509Certificate2(Convert.FromBase64String(certAsString));
答案 1 :(得分:1)
我不明白,但这是正在发生的事情......
我有一个帮助方法,我打电话:
var cert = X509CertificateHelper.LoadCertificate(StoreName.My, StoreLocation.LocalMachine, "thumbprintgoeshere");
当我这样称呼时,cert
已成功填充,甚至HasPrivateKey
也是如此。但是,如果我然后执行以下操作:
var cert2 = new X509Certificate2(cert.RawData);
然后生成的cert2证书(也是看似有效的证书)的HasPrivateKey
设置为false。似乎RawData
属性“剥离”了私钥(是的,它是可导出的 - 我在创建.pfx w /私钥并将其导入另一个系统并重现此行为时没有问题。)
现在我已经发现了所有这些,我的解决方案不再是对RawData进行硬编码,而是实际从证书存储中加载证书 - 正是我试图避免做的事情。如果有人有更好的想法,请把它放在我身上。但在那之前,我称之为失败,这是我的最终结果。 : - (