2

我正在尝试从 pfx 文件加载带有私钥的证书并将其导入 LocalMachine/My (Personal) 证书存储。我的代码工作正常,只是当我在商店中查看证书时它说

“找不到关联的私钥”

此外,certutil 说

“找不到用于解密的证书和私钥”

奇怪的是,我的代码在 Windows 7 开发盒上运行良好,但在 Windows Server 2008 R2 或 2012 上却不行。同样奇怪的是,如果我使用 mmc 手动导入 pfx 文件,私钥似乎可以正常保存。

这是我用来加载文件和导入的代码:

// load the certificate from pfx file
X509Certificate2 cert = new X509Certificate2(filePath, pfxPassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);

// import to the store
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite); //tried MaxAllowed as well
store.Add(caCert);
store.Close();

有任何想法吗?对于背景信息,我还在前面的步骤中使用 BouncyCastle 在代码中生成证书。我在该步骤中遇到了一些保留私钥的问题,但通过这个问题的答案得到了解决。尝试导入的代码也以管理员身份运行。

4

1 回答 1

0

离开这个问题的一点时间帮助我完善了我的调查。我在

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
并发现该文件没有所有者,也没有设置权限(即使是管理员或系统也没有)。手动修改这些权限会导致在商店中查看证书时“关联的私钥”消息消失。

这导致我在尝试将其导入商店之前修改我的代码以设置对私钥的权限: https ://stackoverflow.com/a/4902009/332610

万岁!

于 2015-10-09T18:54:49.790 回答