无法导入带有私钥的证书pfx,以便从Windows Server 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(personal)证书存储。我的代码工作得很好,除了当我在商店里查看证书时它说

"找不到关联的私钥"

此外,certutil说

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

奇怪的是,我的代码在Windows7开发框上工作正常,但在WindowsServer2008 R2或2012上不正常。同样奇怪的是,如果我使用mmc手动导入pfx文件,私钥似乎会正确地保持。

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

1
2
3
4
5
6
7
8
// 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生成证书。在这一步中,我在保持私钥的过程中遇到了一些问题,但问题的答案解决了。此外,尝试导入的代码正以管理员身份运行。


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

1
2
C:\ProgramData\Microsoft\Crypto
SA\MachineKeys

中找到了导入证书的私钥文件。并发现该文件没有所有者和权限集(甚至没有为管理员或系统设置)。手动修改这些权限会导致在存储中查看证书时"关联的私钥"消息消失。

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

万岁!