c# - 在计算机上未安装PFX的情况下,使用客户端证书发出HTTP请求?

原文 标签 c# ssl x509 client-certificates 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();


当我在计算机上执行此代码时,我将可以访问相应的.pfx文件,并且我相信使用this thread中提到的内容,我可以在计算机上安装pfx文件,但我不想做这个。

有什么方法可以通过请求中附带的pfx证书发出此请求?我的意思是,仅将上述代码中的JohnDoe.cerx替换为JohnDoe.cer,还是类似的东西?

谢谢。

编辑:这个问题的全部要点是,我想要一种无需在计算机上安装它即可使用证书的方法。我可以按照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文件不包含进行客户端身份验证所需的私钥。

相关文章:

java - Android上的安全性

ssl - 在Mono(OS X受信任的根)上验证x509证书

c# - C#正则表达式搜索为false

c# - RadGrid内的ComboBox

ssl - Rails和Nginx www与非www混在一起

php - 为什么phpseclib无法正确签名此证书?

java - 如何使用多个信任源初始化TrustManagerFactory?

c# - 如何通过代码将自定义configSections添加到app.config文件

c# - 无法转换为派生类的继承类字段

c# - 使用套接字通信的.Net中的对等mutal SSL身份验证