【问题标题】:Trouble installing certificate from .pfx file从 .pfx 文件安装证书时遇到问题
【发布时间】: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 管理控制台中导入证书而不指定密码,效果很好。

有人知道如何以编程方式执行此操作吗?

【问题讨论】:

    标签: c#-3.0 x509certificate


    【解决方案1】:

    如果您尝试在 Windows XP 或 Windows 2003 上使用空密码创建 X509Certificate2 实例,则会出现“加载证书失败:指定的网络密码不正确”。会抛出异常。

    如果可以,请尝试使用不为空的密码创建证书。那么一切都会好起来的。

    【讨论】:

    • 我在 Windows XP SP3 上遇到了同样的问题,可以使用不需要密码的 X509Certificate2 构造函数版本来修复它
    【解决方案2】:

    希望这对某人有所帮助(并扩展 uGeeen 的答案:

    User "S C" 指出在 Windows XP 和 Windows Server 2003 上对证书密码的以下要求。

    0 < password.Length < 32
    

    我看到关于是否允许 32 的相互矛盾的报告。我可以确认我使用的是 32 个字符的密码(MD5 哈希),并将其截断为 30 个字符解决了这个问题。

    【讨论】:

    • 在 Windows10 中导出到 PFX 时,我只能在密码中输入 50 个字符
    【解决方案3】:

    您是从工作进程还是其他一些模拟进程执行此操作?可能只是您的进程使用的身份在没有加载身份用户的配置文件的情况下被初始化,这似乎导致无法访问用户的证书存储。

    在从 ASP.Net/IIS 进程中加载​​带有私钥的 x509 证书时,我遇到了类似的问题,并且为处理的工作人员打开配置文件加载就可以了

    【讨论】:

      【解决方案4】:

      如果有人遇到类似问题:我设法安装了证书并以另一种方式保留了私钥。我找到了你可以从这里获得的 WinHttpCertCfg 命令行工具:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/winhttpcertcfg_exe__a_certificate_configuration_tool.asp

      然后我以编程方式调用此命令行工具来安装证书。这个网站给了我如何使用它的提示:weblogs.asp.net/hernandl/archive/2005/02/09/…

      干杯,克里斯

      【讨论】:

        猜你喜欢
        • 2015-08-30
        • 2011-04-22
        • 2011-08-13
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        相关资源
        最近更新 更多