Encryption 用于单元测试的样本X509Certificate2原始数据?

Encryption 用于单元测试的样本X509Certificate2原始数据?,encryption,.net-4.0,x509certificate,Encryption,.net 4.0,X509certificate,我正在进行一些RSA加密/解密单元测试,我的所有函数都需要一些证书。我对这些证书使用依赖注入,所以对于我的单元测试,我只想获得一些示例虚拟(但功能)证书来测试我的加密/解密库。我想通过在单元测试的设置方法中硬编码有效证书的原始数据来实现这一点 我在哪里可以找到这样的东西来加入我的单元测试的设置方法?或者我如何创建并提取这些“原始数据”?我不确定这个“原始数据”到底是什么。如果有人在网上发布了一些东西(这显然是不安全的,这对于我的单元测试目的来说是很好的),那将是更好的(从懒惰的角度来看),但我可

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


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

我不理解,但这就是正在发生的事情

我有一个我调用的助手方法:

var cert = X509CertificateHelper.LoadCertificate(StoreName.My, StoreLocation.LocalMachine, "thumbprintgoeshere");
当我调用此函数时,
cert
已成功填充,甚至
HasPrivateKey
也为true。但是,如果我随后执行以下操作:

var cert2 = new X509Certificate2(cert.RawData);
然后,生成的cert2证书(看起来也是有效的证书)将
HasPrivateKey
设置为false。似乎
RawData
属性“剥离”了私钥(是的,它是可导出的-我创建一个.pfx w/私钥并将其导入另一个系统并复制此行为没有问题)


现在我已经发现了所有这些,我的解决方案不再是硬编码RawData,而是从证书存储中实际加载证书——这正是我试图避免的。如果有人有更好的主意,请告诉我。但在此之前,我称之为失败,这是我的最终结果-(

我不明白,但事情就是这样

我有一个我调用的助手方法:

var cert = X509CertificateHelper.LoadCertificate(StoreName.My, StoreLocation.LocalMachine, "thumbprintgoeshere");
当我调用此函数时,
cert
已成功填充,甚至
HasPrivateKey
都为true。但是,如果我执行以下操作:

var cert2 = new X509Certificate2(cert.RawData);
然后,生成的cert2证书(看起来也是有效的证书)将
HasPrivateKey
设置为false。似乎
RawData
属性“删除”了私钥(是的,它是可导出的-我创建一个带有私钥的.pfx并将其导入另一个系统并复制此行为没有问题)

现在我已经发现了所有这些,我的解决方案不再是硬编码原始数据,而是从证书存储中实际加载证书-这正是我试图避免做的。如果有人有更好的想法,请告诉我。但在此之前,我称这是一个失败,这是我的最终结果。:-(

Use.Export)()而不是.RawData 当X509Certificate2中有私钥时,您可以调用:

var certBytes = certificateWithPrivateKey.Export(X509ContentType.Pkcs12);
它返回一个类似于.RawData的字节[],但保留私钥。 要将其存储在单元测试中,您可以将一个常量字符串作为该数据的Base64。您可以从以下位置获取:

var certAsString = Convert.ToBase64String(certBytes);
通过使用此字节[]构造X509Certificate2,可以从该字节[]还原密钥:

var certificateCopy = new X509Certificate2(certBytes);
// Or from the string:
var certificateCopy2 = new X509Certificate2(Convert.FromBase64String(certAsString));
使用.Export()而不是.RawData 当X509Certificate2中有私钥时,您可以调用:

var certBytes = certificateWithPrivateKey.Export(X509ContentType.Pkcs12);
它返回一个类似于.RawData的字节[],但保留私钥。 要将其存储在单元测试中,您可以将一个常量字符串作为该数据的Base64。您可以从以下位置获取:

var certAsString = Convert.ToBase64String(certBytes);
通过使用此字节[]构造X509Certificate2,可以从该字节[]还原密钥:

var certificateCopy = new X509Certificate2(certBytes);
// Or from the string:
var certificateCopy2 = new X509Certificate2(Convert.FromBase64String(certAsString));

因此,我尝试创建了一个自签名证书。通过Certs MMC管理单元,我可以导出完整的私钥。但是,当我通过
X509Store.Certificates.Find
加载它时,
HasPrivateKey
属性为false,
PrivateKey
属性为null。我不确定如何获取cer的
RawData
t其中包含私钥…因此我尝试创建一个自签名证书。通过Certs MMC管理单元,我可以导出完整的私钥。但是,当我通过
X509Store.Certificates.Find
加载它时,
HasPrivateKey
属性为false,
PrivateKey
属性为null。我不确定如何获取有私钥的证书的
RawData
…他手头没有用于复制的证书!对我有用…我必须使用带有标志X509KeyStrageFlags.Exportable的X509Certificate2构造函数,然后使用X509ContentType.PKCS12导出他手头没有用于复制的证书!对我有用…我必须使用带有标志X509KeyStrageFlags.Exportable的X509Certificate2构造函数,因此稍后使用X509ContentType.Pkcs12导出