这是我第一次必须使用证书身份验证。一个商业伙伴公开了两个服务,一个 XML Web 服务和一个 HTTP 服务。我必须使用 .NET 客户端访问它们。
我试过的
0.设置环境
我已经使用 certmgr.exe 在我的本地计算机(win 7 专业版)中安装了 SSLCACertificates(在 root 和两个中间)和客户端证书。
1.对于网络服务
- 我有客户证书(der)。
- 该服务将通过 .NET 代理使用。
这是代码:
OrderWSService proxy = new OrderWSService();
string CertFile = "ClientCert_DER.cer";
proxy.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile));
orderTrackingTO ot = new orderTrackingTO() { order_id = "80", tracking_id = "82", status = stateOrderType.IN_PREPARATION };
resultResponseTO res = proxy.insertOrderTracking(ot);
在最后的声明中报告了异常:The request failed with an empty response
。
2.对于HTTP接口
- 这是我必须通过 POST 方法调用的 HTTPS 接口。
- HTTPS 请求将使用 HTTPWebRequest 从 .NET 客户端发送。
这是代码:
string PostData = "MyPostData";
//setting the request
HttpWebRequest req;
req = (HttpWebRequest)HttpWebRequest.Create(url);
req.UserAgent = "MyUserAgent";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile, "MyPassword"));
//setting the request content
byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
Stream dataStream = req.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
//obtaining the response
WebResponse res = req.GetResponse();
r = new StreamReader(res.GetResponseStream());
在最后的声明中报告了异常:The request was aborted: Could not create SSL/TLS secure channel
。
3. 最后尝试:使用浏览器
在 Chrome 中,安装证书后,如果我尝试访问这两个 url,我会收到 107 错误:
Error 107 (net::ERR_SSL_PROTOCOL_ERROR)
我被困住了。