是否可以在X509Certificate2或X509Store中存储RSACryptoServiceProvider?

时间:2017-08-23 04:25:21

标签: c# .net-4.0

我的硬件设备以RSAParameters的形式向我提供了密钥对 我可以使用以下代码转换为CryptoServiceProvider并加密/解密/签名。

RSACryptoServiceProvider RSAPrivKey = new RSACryptoServiceProvider(2048) { PersistKeyInCsp = false };
// RSAParameters rsaparam = RSAPrivKey.ExportParameters(true); // for testing
RSAPrivKey.ImportParameters(rsaparam);

我不允许使用文件系统来存储证书,并且由于硬件设备有时不可用,我喜欢将此证书存储在机器证书存储区(Certificates -> Local Computer -> personal)

正如X509Certificate2.PrivateKey document建议的那样,我应该可以设置证书的私钥并将其保存到存储中,如下所示

X509Certificate2 Cert2 = new X509Certificate2();
Cert2.PrivateKey = RSAPrivKey;

X509Store cstore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
cstore.Open(OpenFlags.MaxAllowed);
cstore.Add(Cert2);
cstore.Close();

但是我收到错误m_safeCertContext is an invalid handle根据this answer正在发生,因为X509Certificate2的某些属性未设置,这是正确的。我无法将有效日期,发行人......分配给证书。

问题

甚至可以在RSACryptoServiceProvider中存储X509Certificate2吗?如果是的话,我错过了一些步骤吗?

0 个答案:

没有答案