1

我正在使用以下代码安装 pfx 文件(密码和 certPath 被传递到方法中):

X509Certificate2 cert = password != string.Empty ? new X509Certificate2(certPath, password) : new X509Certificate2(certPath);
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);   
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

在某些机器上这是可行的,但在其他环境中它每次都失败。没有抛出异常,但是当我加载 mmc.exe 并添加证书管理单元时,证书似乎没有正确安装。它显示在正确的商店下,但是当我右键单击证书并进入“所有任务”>“管理私钥”时,它会加载一个对话框,显示“找不到对象”。事件查看器中没有记录任何内容,并且单步执行似乎已正确执行的代码。

FindPrivateKey.exe 也找不到密钥。

什么可能导致此证书无法在某些看起来与其工作环境相同的机器上运行?

从证书管理单元中删除密钥并重新导入它可以工作,但我需要它从 C# 代码中可靠地工作。


编辑 - 我应该补充一点,失败的证书有一个密码,这意味着第一行代码是有效的:

X509Certificate2 cert = new X509Certificate2(certPath, password);
4

1 回答 1

4

您是否尝试过添加 X509KeyStorageFlags?

new X509Certificate2(certPath, password, X509KeyStorageFlags.PersistKeySet);

编辑:这个问题的实际答案可以在这篇知识库文章中找到:http: //support.microsoft.com/kb/950090

当使用 X509Certificate 或 X509Certificate2 类安装证书时,X509Certificate/X509Certificate2 默认会创建一个临时容器来导入私钥。当不再有对私钥的引用时,将删除私钥。

于 2013-04-29T11:13:59.523 回答