【问题标题】:X509Certificate2 prompts me for passwordX509Certificate2 提示我输入密码
【发布时间】:2015-09-15 14:07:43
【问题描述】:

我已将我的私钥导出到一个 pfx 文件,并使用它来将一些数据发布到服务器。当代码到达这一行时

X509Certificate2 cert = new X509Certificate2("C:\\mycerts\\dml.pfx","Passw0rd");

出现提示并要求我定义密码。我写了2次新密码。然后当我到达这条线

Stream newStream = request.GetRequestStream();

再次提示,我输入新定义的密码,发帖成功。

有没有办法避免用户交互?

【问题讨论】:

  • 您好,您的提示是什么形式?我需要相同的场景,但我的代码只是继续而不要求我提供凭据
  • 您是否按照 CryptoGuys 回答的建议遵守本地安全政策?
  • 问题是我没有收到提示,因为我使用的是本地计算机证书,所以它不会影响我。谢谢!

标签: c# authentication httpwebrequest ssl-certificate x509certificate2


【解决方案1】:

系统似乎配置为对所有密钥使用私钥强保护。您应该使用组策略禁用此设置:http://blogs.technet.com/b/pki/archive/2009/06/17/what-is-a-strong-key-protection-in-windows.aspx

【讨论】:

  • 我进入了本地安全策略并将“系统加密设置 - 对存储在此计算机上的用户密钥强制执行强密钥保护”更改为不需要用户输入。但这并没有改变任何东西。难道这个创建键有一个设置会覆盖这个?
  • 您的计算机是 Active Directory 域的成员吗?
  • 它不是其中的一部分
  • 您是否尝试了另一个 PFX 来测试?我现在不记得了,但是这个设置不太可能在 PFX 文件中设置。
  • 于是我发现这台机器上安装了另一个密码服务提供商。我尝试删除它,然后没有提示,只是一个错误。我想我的证书都连接到这个 CSP
【解决方案2】:

所以我发现我的证书有一个邪恶的加密服务提供商。使用 certutil -dump 我会得到这个

---------------- 结束嵌套级别 1 ----------------

提供者 = CRYPTOMATHiC RSA 完整提供者 1.2

简单容器名称:验证

唯一容器名称:验证

错误:缺少键关联属性:CERT_KEY_IDENTIFIER_PROP_ID

无法加载密钥:密钥不存在。 0x8009000d (-2146893811 NTE_NO_KEY)

加密测试失败

不知道为什么会这样不好,但我设法运行了一个修复工具,然后它就会显示

---------------- 结束嵌套级别 1 ----------------

Provider = Microsoft Enhanced RSA and AES Cryptographic Provider

加密测试通过

现在它可以在不提示输入密码的情况下工作

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 2012-07-25
    • 2018-12-02
    • 2018-03-27
    • 2016-04-08
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多