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
万岁!