需要存储X509Certificate2 p12吗?

5

当运行以下代码时,会出现什么问题:

X509Certificate2 cert = new X509Certificate2(@"C:\file.p12", "password", X509KeyStorageFlags.Exportable);
RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)cert.PrivateKey;

我得到了以下错误:密钥集不存在
我还没有将证书添加到存储中,这是访问私钥所必需的吗?
1个回答

12
在X509Certificate2构造函数的最后一个参数中添加X509KeyStorageFlags.PersistKeySet选项。否则,当它加载p12文件时,它将不会加载私钥。具体来说:
X509Certificate2 cert = new X509Certificate2(@"C:\file.p12", "password",    
    X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
RSACryptoServiceProvider crypt = (RSACryptoServiceProvider)cert.PrivateKey;

如果失败了,可能是密钥存储位置的文件权限问题。请参见 X509Certificate - Keyset does not exist 以获取解释和示例。

@Rutger,我在答案中添加了一个额外的检查。 - akton
我还没有将证书添加到存储中,这是必需的吗? - Rutger
@Rutger 代码没有添加到证书存储中,但是它正在将私钥存储在密钥库中(相关但不同的概念)。问题可能是访问密钥库的权限。 - akton
确实是密钥库的访问问题。 - Rutger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接