我是密码学的新手,但我有点卡住了:
我正在尝试使用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.
谢谢!
解决方法:
潜在的问题是,您只授予程序对证书的访问权限.要执行身份验证,它也需要访问私钥.
正确实例化的X509Certificate2可以带有私钥,应将其传递给ClientCertificates.Add()方法.我相信Import()
方法可以接受.pfx文件作为输入;导出的.cer文件缺少私钥,对客户端身份验证没有用.