這是我第一次使用證書認證。 商業合作伙伴公開兩種服務,即XML Web服務和HTTP服務。我必須使用.NET客戶端訪問它們。使用證書認證訪問Web服務和HTTP接口
我已經試過
0設置
我已經安裝了SSLCACertificates(根和兩個中間)的環境和我的本地機器的客戶證書(勝7專業)使用certmgr.exe。
1.對於Web服務
- 我有客戶證書(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接口
- 它是HTTPS接口I具有通過POST方法來調用。
- 將使用HTTPWebRequest從.NET客戶端發送HTTPS請求。
下面的代碼:
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)
我卡住了。
ü不能與SSL證書athorization HTTP請求。這需要通過https完成。你需要這個證書嗎?如果答案是肯定的,那麼你必須讓這個Web服務通過https進行通信。 – harry180
@ harry180。謝謝澄清。我編輯了這個問題。 –
在http協議中,當你發送一個用戶名和密碼時,它必須在MD5中加密。即使你這樣做,將這些信息泄露給未經授權的人也是非常容易的。重新考慮使用https協議進行這種信息共享。 – harry180