c# - X509Certificate2 p12 是否需要存储?

标签 c# x509certificate private-key x509certificate2

运行以下代码时的问题:

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

我收到以下错误:Keyset does not exist

我还没有将证书添加到商店,这是访问私钥所必需的吗?

最佳答案

添加X509KeyStorageFlags.PersistKeySet X509Certificate2 构造函数的最后一个参数的选项。否则,当它加载 p12 文件时,它不会加载私钥。具体来说:

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

如果失败,则可能是 key 存储位置的文件权限问题。参见 X509Certificate - Keyset does not exist一个解释和例子。

关于c# - X509Certificate2 p12 是否需要存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12365553/

相关文章:

c# - 使用对象类型在模块之间传递信息

java - 如何让信任 anchor 在 Android API 级别 16-19 上正常工作

ssl - 此证书具有无效的颁发者钥匙串(keychain)

c# - 更改 X509 证书的颁发者名称

java - 在java中使用私钥身份验证来保护FTP

java - 将字符串转换为加密 key ,反之亦然java

c# - 将私钥转换到 RSACryptoServiceProvider 不起作用

c# - 编辑另一个 C# 应用程序的资源

c# - WPF 中集合的撤消/重做

c# - 使用 App.config 设置强类型变量