我试图在C#测试控制台应用程序中使用X509Certificate2类在本地计算机(Win Server 2003)上安装证书。当我安装证书用下面的代码,一切都很好:从.pfx文件安装证书时遇到问题
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管理控制台中导入证书而未指定密码,则效果很好。
有没有人知道如何以编程方式做到这一点?
我在Windows XP SP3上遇到了同样的问题,可以修复它被我们不带密码的X509Certificate2构造函数版本 – NineBerry 2013-12-12 15:29:14