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 建议的方式使用它,但我不想在我的机器上安装证书。如果这是不可能的,那么有人可以解释为什么我们不能这样做吗?

4

2 回答 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 文件不包含进行客户端身份验证所需的私钥。

于 2014-08-12T19:36:34.207 回答
0

用这个替换第一行

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

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

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

于 2014-08-12T19:50:35.573 回答