【问题标题】:c# ClientCertificates.Add() certificate not attached to httpwebrequestc# ClientCertificates.Add() 证书未附加到 httpwebrequest
【发布时间】:2015-10-01 20:03:05
【问题描述】:

我正在从插入 USB 读卡器的智能卡中获取自签名 piv auth X509 证书,并通过以下代码将其附加到 HttpWebRequest:

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uriInfo);
Request.ClientCertificates.Add(theCert);
Request.Method = "POST";

//get the response back (the mini driver will prompt for a PIN at this point)
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();

让我感到困惑的是,这段代码在某些机器上有效,但在其他机器上无效。它在一台机器上的 Win7 上工作,而不是在另一台机器上的 Win7 上工作,它在 Win8 上工作。我什至尝试在 Win8 的虚拟机中运行它,它是一个无法运行的 Win7 主机的来宾。

我已经阅读了很多关于堆栈溢出的文章,并尝试了许多不同的方法来让它工作,但似乎没有。由于我的证书不包含私钥信息,这似乎就是为什么它不包含在请求中?类似于这个问题:HttpWebRequest doesn't seem to be sending a client SSL certificate

由于它适用于某些机器而不适用于其他机器,因此我需要在它不工作的机器上进行不同的配置吗?

我知道由于一些wireshark调查,证书没有被附加。我正在使用的证书已在服务器上设置,因此它应该信任它(并且在某些情况下确实如此)。

我所做的与其他帖子不同的一些事情是我从 piv 智能卡获取证书并将其简单地附加到请求中。当我调用 GetResponse 时,Microsoft 微型驱动程序会提示输入 PIN。但是由于证书没有附加到请求中,我从来没有收到输入 PIN 的提示,并且服务器返回 403 Forbidden 错误。

有什么想法吗?

(这是我在这里的第一篇文章,所以请原谅我犯下的任何罪过)

【问题讨论】:

    标签: c# ssl httpwebrequest x509certificate client-certificates


    【解决方案1】:

    好的,我终于找到了问题所在。我注意到当智能卡插入读卡器时,证书没有传播到个人商店。然后我发现负责执行此操作的是一个名为“Certificate Propagation”的服务。

    我注意到服务没有运行,当我尝试启动它时,它会立即停止发送消息,

    "本地计算机上的证书传播服务已启动 然后停了下来。某些服务在不使用时会自动停止 通过其他服务或程序。”

    在深入研究了为什么此服务会启动但无法继续运行后,我发现这是由于注册表中隐藏的组策略设置所致。将以下注册表设置从 0 更改为 1 为我解决了这个问题:

    HKLM\Software\Policies\Microsoft\Windows\Certprop\CertPropEnabled = 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多