我的硬件设备以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
吗?如果是的话,我错过了一些步骤吗?