使用客户端证书发出HTTP请求而不在机器上安装PFX?

Gro*_*Man 3 c# ssl client-certificates x509 mutual-authentication

我有一个小型控制台应用程序,它使用客户端证书来创建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();
Run Code Online (Sandbox Code Playgroud)

当我在我的机器上执行此代码时,我将访问相应的.pfx文件,我相信使用此线程中提到的内容我将能够在我的机器上安装pfx文件,但我不想这样做这个.

有什么方法可以通过某种方式在请求中附加pfx证书来提出此请​​求吗?我的意思是,只需在上面的代码中用JohnDoe.pfx替换JohnDoe.cer,或者类似的东西?

谢谢.

编辑:这个问题的重点是我想要一种方法来使用证书而无需将其安装在我的计算机上.我可以用esskar和xaver建议的方式使用它,但我不想在我的机器上安装cert.如果无法做到这一点,有人可以提供解释为什么我们不能这样做的任何机会?

ess*_*kar 6

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

X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import("JohnDoe.pfx", "password-for-pfx", X509KeyStorageFlags.PersistKeySet);
Run Code Online (Sandbox Code Playgroud)

现在迭代集合并找到您需要的证书

foreach (X509Certificate2 cert in collection)
{
    // work with cert
}
Run Code Online (Sandbox Code Playgroud)

这应该会帮助你知道!

问题:

什么安装意味着什么?将它复制到机器?把它放进你的程序是没关系的吗?您不能仅使用CER文件,因为CER文件不包含您需要进行客户端身份验证的私钥.