【发布时间】:2014-10-25 03:37:56
【问题描述】:
我正在尝试在 C# 测试控制台应用程序中使用 X509Certificate2 类在我的本地计算机(Win Server 2003)上安装证书。当我使用以下代码安装证书时,一切都很好:
var serviceRuntimeMachineCertificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
serviceRuntimeMachineCertificateStore.Open(OpenFlags.ReadWrite);
cert = new X509Certificate2(certificatePath);
serviceRuntimeMachineCertificateStore.Add(cert);
serviceRuntimeMachineCertificateStore.Close();
问题是,当没有 X509KeyStorageFlags.PersistKeySet 安装时,证书的私钥不会持久化。所以我尝试像这样实例化证书(私钥没有密码,所以我传入一个空字符串):
var serviceRuntimeMachineCertificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
serviceRuntimeMachineCertificateStore.Open(OpenFlags.ReadWrite);
cert = new X509Certificate2(certificatePath, "", X509KeyStorageFlags.PersistKeySet);
serviceRuntimeMachineCertificateStore.Add(cert);
serviceRuntimeMachineCertificateStore.Close();
但尝试实例化证书会引发 System.Security.Cryptography.CryptographicException “无法加载证书:指定的网络密码不正确。”,即使私钥没有密码。
如果我在 Microsoft 管理控制台中导入证书而不指定密码,效果很好。
有人知道如何以编程方式执行此操作吗?
【问题讨论】: