样本X509Certificate2 RawData用于单元测试?

时间:2011-12-14 17:26:52

标签: encryption .net-4.0 x509certificate

我正在进行一些RSA加密/解密单元测试,我的所有功能都需要一些证书。我正在使用依赖注入这些证书,所以对于我的单元测试,我想获得一些示例虚拟(但功能)证书来测试我的加密/解密库。我想通过在单元测试的SetUp方法中硬编码有效证书的RawData来做到这一点。

在哪里可以找到这样的东西放入我的单元测试'SetUp方法?或者我如何创建它并拉出这个“原始数据”?我不确定这个“RawData”到底是什么。如果某人有在线发布的内容(这显然是不安全的,这对于我的单元测试目的来说是好的),那将是更好的(从懒惰的角度来看)但我很好地生成证书并提取这些数据。

2 个答案:

答案 0 :(得分:2)

使用.Export()而不是.RawData

当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进行硬编码,而是实际从证书存储中加载证书 - 正是我试图避免做的事情。如果有人有更好的想法,请把它放在我身上。但在那之前,我称之为失败,这是我的最终结果。 : - (