如何在没有安装PFX证书的计算机上使用客户端证书进行HTTP请求?

3

我有一个小的控制台应用程序,使用客户端证书进行 HttpWebRequest 请求:

X509Certificate Cert = X509Certificate.CreateFromCertFile("JohnDoe.cer");            
HttpWebRequest Request = (HttpWebRequest)
WebRequest.Create("https://10.135.12.166:4434");
Request.ClientCertificates.Add(Cert);
Request.UserAgent = "Client Cert Sample";
Request.Method = "GET";
HttpWebResponse Response = (HttpWebResponse) Request.GetResponse();

当我在我的电脑上执行此代码时,我将有权访问相应的.pfx文件,并且我相信使用此线程中提到的内容,我将能够安装pfx文件,但我不想这样做。
是否有任何方法可以使这个请求与pfx证书相关联?我的意思是,仅通过在上面的代码中用JohnDoe.pfx替换JohnDoe.cer,或类似的方式?
谢谢。
编辑:这个问题的整个重点是我想要一种在不必在计算机上安装证书的情况下使用证书的方法。我可以按照esskar和xaver建议的方式使用它,但我不想在我的机器上安装证书。如果这不可能完成,请有人解释一下为什么我们不能这样做?

安装是什么意思?是将其复制到机器上吗?还是将其安装到计算机的证书存储中?请解释得更详细! - esskar
2个回答

6

PFX 是一个可以容纳一个或多个证书的容器。您可以使用以下代码在 c# 中打开它们:

X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import("JohnDoe.pfx", "password-for-pfx", X509KeyStorageFlags.PersistKeySet);

现在遍历集合并找到你需要的证书。
foreach (X509Certificate2 cert in collection)
{
    // work with cert
}

这应该能帮助你了解!

问题:

安装是什么意思?是将它复制到机器上吗?将其放入程序中是否可以?你不能仅使用CER文件,因为CER文件不包含你需要进行客户端身份验证所需的私钥。


1
即使是这样,我也需要在我的机器上安装证书,对吧?除非我在我的机器上安装了证书,否则那段代码将无法执行。这就是我想要避免的。我已经在问题中添加了详细信息。 - GrowinMan
安装证书=在Microsoft管理控制台中安装(我使用的是Windows)。我正在尝试弄清楚是否可以在请求中发送.pfx文件,而无需在Microsoft管理控制台中安装它,即不必执行此操作:http://pubs.vmware.com/view-51/index.jsp?topic=%2Fcom.vmware.view.installation.doc%2FGUID-2D968AD7-ED62-46CA-B2B2-CCC526CA09F5.html - GrowinMan
1
哦,我完全忽略了X509KeyStorageFlags.PersistKeySet()的价值。我使用它作为X509Certificate2("JohnDoe.pfx","pass",X509KeyStorageFlags.PersistKeySet),因为我只需要一个证书。非常感谢您的答案,这解决了我的问题 :) - GrowinMan

0

将第一行替换为此内容

X509Certificate Cert = new X509Certificate("path/to/JohnDoe.cer");

您也可以提供 *.pfx 文件而不是 *.cer 文件

如果证书受密码保护,您可以将其作为第二个参数提供


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接