无法导入带有私钥的证书 pfx 以从 windows 服务器 2012 上的 .net c# 3.5 存储

Cannot import certificate pfx with private key to store from .net c# 3.5 on windows server 2012

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

"The associated private key cannot be found"

此外,certutil 说

"Cannot find the certificate and private key for decryption"

st运行ge 部分是我的代码在 Windows 7 开发箱上运行良好,但在 Windows Server 2008 R2 或 2012 上运行不正常。还有 st运行 ge,如果我使用 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 的答案解决。此外,尝试导入的代码是 运行 作为管理员。

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

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

这导致我在尝试将私钥导入商店之前修改我的代码以设置私钥的权限:

万岁!