【问题标题】:Cannot import certificate pfx with private key to store from .net c# 3.5 on windows server 2012无法使用私钥导入证书 pfx 以从 Windows Server 2012 上的 .net c# 3.5 存储
【发布时间】:2015-11-30 21:36:32
【问题描述】:

我正在尝试从 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 在代码中生成证书。我在该步骤中遇到了一些保留私钥的问题,但通过this question 的答案得到了解决。尝试导入的代码也以管理员身份运行。

【问题讨论】:

  • @Raj 感谢您的指点,但我目前并未明确使用 CryptoAPI。我想知道是否有办法使用 c# System.Security.Cryptography.X509Certificates 或相关命名空间来做到这一点......

标签: c# .net bouncycastle pfx certificate-store


【解决方案1】:

解决这个问题有一点时间帮助我完善了我的调查。我在

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

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

万岁!

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2019-03-26
    • 2019-12-06
    • 2016-02-17
    • 2011-11-09
    • 2015-07-19
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多