3

我是密码学的新手,我有点卡住了:

我正在尝试(从我的开发环境)使用 HTTPS 连接到 Web 服务。Web 服务需要客户端证书 - 我认为我已正确安装。

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

然后,我从商店的证书条目中导出了一个 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。

谢谢!

4

2 回答 2

4

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

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

于 2010-05-24T23:48:22.647 回答
0

看看这个并确认您的错误是由于证书引起的 - 服务器是否发送回有关问题的更多详细信息?使用 HttpWebRequest 通过 SSL 发送请求时出现错误 502(错误网关)

于 2010-05-25T00:43:45.220 回答