【发布时间】: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