C# Can';t使用X509客户端证书连接到HTTPS

C# Can';t使用X509客户端证书连接到HTTPS,c#,.net,asp.net,ssl,x509certificate,C#,.net,Asp.net,Ssl,X509certificate,我刚接触密码学,但我有点被卡住了: 我正在尝试使用HTTPS(从我的开发环境)连接到web服务。web服务需要一个客户端证书——我想我已经正确安装了这个证书 他们向我提供了一个.PFX文件。在Windows7中,我双击该文件将其安装到当前的用户-个人证书存储中 然后,我从存储中的证书条目导出了一个X509 Base-64编码的.cer文件。它没有与之关联的私钥 然后,在我的应用程序中,我尝试连接到以下服务: var certificate = X509Certificate.CreateFrom

我刚接触密码学,但我有点被卡住了:

我正在尝试使用HTTPS(从我的开发环境)连接到web服务。web服务需要一个客户端证书——我想我已经正确安装了这个证书

他们向我提供了一个.PFX文件。在Windows7中,我双击该文件将其安装到当前的用户-个人证书存储中

然后,我从存储中的证书条目导出了一个X509 Base-64编码的.cer文件。它没有与之关联的私钥

然后,在我的应用程序中,我尝试连接到以下服务:

var certificate = X509Certificate.CreateFromCertFile("xyz.cer"));
var serviceUrl = "https://xyz";
var request = (HttpWebRequest) WebRequest.Create(serviceUrl);
request.ClientCertificates.Add(certificate);
request.Method = WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
当我连接时,502连接失败

这种方法有什么不对的地方吗?我们的生产环境似乎使用类似的配置,但它运行的是Windows Server 2003


谢谢

根本的问题是,您只允许您的程序访问证书。要执行身份验证,它还需要访问私钥


正确实例化的
X509Certificate2
可以携带私钥,应该传递给
ClientCertificates.Add()
方法。我相信这个方法可以接受一个.pfx文件作为输入;导出的.cer文件缺少私钥,对客户端身份验证不起作用。

请查看此问题,并验证您的错误是由证书引起的-服务器是否正在发回有关此问题的更多详细信息

因此,web服务将要求我发送私钥进行身份验证?私钥实际上并没有发送到服务器;它用于对一些数据进行数字签名,向服务器证明客户端持有私钥,而没有实际公开私钥。我基本上得到了“System.IO.IOException:从传输流接收到意外的EOF或0字节”。我认为这意味着主机刚刚关闭了连接,甚至没有给我响应:(这家伙也有类似的问题,但这是一个安全协议问题: