在机器上没有安装PFX的情况下使用客户端证书发出HTTP请求

本文关键字:证书 客户端 请求 HTTP 情况下 机器 安装 PFX | 更新日期: 2023-09-27 18:17:45

我有一个小型控制台应用程序,它使用客户端证书生成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。和JohnDoe一起。PFX在上面的代码,或类似的东西?

谢谢。

EDIT:这个问题的全部要点是我想要一种方法来使用证书,而不必将其安装在我的计算机上。我可以按照esskar和xaver建议的方式使用它,但我不想在我的机器上安装证书。如果这是不可能的,有没有人能提供一个解释为什么我们不能这样做?

在机器上没有安装PFX的情况下使用客户端证书发出HTTP请求

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

将第一行替换为

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

也可以提供*。PFX文件而不是*.cer

如果证书是密码保护的,你可以提供它作为第二个参数