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.cer 替换为 JohnDoe.pfx 或类似的东西?

谢谢。

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

关于c# - 在机器上没有安装 PFX 的情况下使用客户端证书发出 HTTP 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271876/

相关文章:

c# - 当 ==、CompareTo() 和 Equals() 不一致时会发生什么?

c# - 将 List<object> 绑定(bind)到 Datagrid WPF,C#

ubuntu - 无法通过 SSL 连接到 SVN

sharepoint - 从支持 SSL 的 SharePoint 站点打开文件

java - SSL 中的 certificate_unknown 异常

go - 如何解析 PEM 证书的集合

c# - 从使用由 C++ MFC 应用程序调用的异步的 C# COM 组件显示模态窗口

python - 使用 WebSocket 的 AWS IoT MQTT : CERTIFICATE_VERIFY_FAILED

java - CA 如何决定实体是否值得信赖

c# - 如何确定是什么使用了串口资源导致访问被拒绝?