在机器上没有安装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是一个可以容纳一个或多个证书的容器。您可以使用以下代码在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
如果证书是密码保护的,你可以提供它作为第二个参数