c# ClientCertificates.Add() 证书未附加到 httpwebrequest
c# ClientCertificates.Add() certificate not attached to httpwebrequest
我正在从插入 USB reader 的智能卡中获取自签名 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 主机的访客。
我阅读了很多关于堆栈溢出的文章,并尝试了很多不同的方法来让它起作用,但似乎没有任何效果。由于我的证书不包含私钥信息,这似乎就是为什么它不包含在请求中的原因?类似于这个问题:
因为它在某些机器上工作而不在其他机器上工作,我需要在它不工作的机器上进行不同的配置吗?
我知道由于一些 wireshark 调查,证书没有被附加。我使用的证书已在服务器上设置,因此它应该信任它(在某些情况下确实如此)。
我做的一些事情与其他 posts 不同的是我从 piv 智能卡获取证书并将其简单地附加到请求中。当我调用 GetResponse 时,Microsoft 微型驱动程序会提示输入 PIN。但是由于证书没有附加到请求中,我从来没有得到输入 PIN 和服务器的提示 returns 403 禁止错误。
有什么想法吗?
(这是我第一次post来这里,所以请原谅我犯下的任何罪过)
好的,我终于找到问题所在了。我注意到当智能卡插入 reader 时,证书没有传播到个人存储。然后我发现负责执行此操作的是名为 "Certificate Propagation".
的服务
我注意到服务不是 运行,当我尝试启动它时,它会立即停止显示消息,
"The Certificate Propagation service on Local Computer has started
then stopped. Some services stop automatically if they are not in use
by other services or programs."
在深入了解为什么该服务会启动但不会停留后 运行 我发现这是由于注册表中隐藏的组策略设置所致。将以下注册表设置从 0 更改为 1 解决了我的问题:
HKLM\Software\Policies\Microsoft\Windows\Certprop\CertPropEnabled = 1
我正在从插入 USB reader 的智能卡中获取自签名 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 主机的访客。
我阅读了很多关于堆栈溢出的文章,并尝试了很多不同的方法来让它起作用,但似乎没有任何效果。由于我的证书不包含私钥信息,这似乎就是为什么它不包含在请求中的原因?类似于这个问题:
因为它在某些机器上工作而不在其他机器上工作,我需要在它不工作的机器上进行不同的配置吗?
我知道由于一些 wireshark 调查,证书没有被附加。我使用的证书已在服务器上设置,因此它应该信任它(在某些情况下确实如此)。
我做的一些事情与其他 posts 不同的是我从 piv 智能卡获取证书并将其简单地附加到请求中。当我调用 GetResponse 时,Microsoft 微型驱动程序会提示输入 PIN。但是由于证书没有附加到请求中,我从来没有得到输入 PIN 和服务器的提示 returns 403 禁止错误。
有什么想法吗?
(这是我第一次post来这里,所以请原谅我犯下的任何罪过)
好的,我终于找到问题所在了。我注意到当智能卡插入 reader 时,证书没有传播到个人存储。然后我发现负责执行此操作的是名为 "Certificate Propagation".
的服务我注意到服务不是 运行,当我尝试启动它时,它会立即停止显示消息,
"The Certificate Propagation service on Local Computer has started then stopped. Some services stop automatically if they are not in use by other services or programs."
在深入了解为什么该服务会启动但不会停留后 运行 我发现这是由于注册表中隐藏的组策略设置所致。将以下注册表设置从 0 更改为 1 解决了我的问题:
HKLM\Software\Policies\Microsoft\Windows\Certprop\CertPropEnabled = 1