我從我的android客戶端通過https調用web服務。我必須驗證從服務器端接收到的證書。我怎麼做 ?目前這是我用來調用Web服務的代碼。從服務器HTTPS接收並驗證證書 - android
private static String SendPost(String url, ArrayList<NameValuePair> pairs) { // url = "https://....."
errorMessage = "";
String response = "";
DefaultHttpClient hc=new DefaultHttpClient();
ResponseHandler <String> res=new BasicResponseHandler();
HttpPost postMethod=new HttpPost(url);
try {
postMethod.setEntity(new UrlEncodedFormEntity(pairs));
response = hc.execute(postMethod, res);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
如何驗證在執行Post期間從服務器收到的自簽名證書?我必須通過公鑰/私鑰進行測試。客戶端將擁有一個CA文件。只需要客戶端使用CA來驗證服務器證書,服務就是公開的。這與公鑰/私鑰有關。在打電話之前,我怎樣才能從服務器接收證書?
他們有幾個選項和代碼片段可用在stackoverflow上。我發現有多個答案的鏈接夫婦是: Accepting a certificate for HTTPs on Android HTTPS GET (SSL) with Android and self-signed server certificate
但我不能做出來,這是很好/適用於我!我不想禁用所有或接受任何。必須檢查公/私鑰/
任何幫助,高度讚賞。
我如何收到證書從服務器和測試數據的呢? – Tvd 2011-04-18 11:02:00
你不需要做任何事情。證書由服務器在SSL握手期間發送,並由客戶端應用程序根據KeyStore內容自動進行驗證。握手在任何HTTP數據交換之前執行。如果你想執行更復雜的或自定義的證書驗證,這也是可能的(但有一點需要解釋,在這個評論中) – Jcs 2011-04-18 11:14:59
@ Jcs,我已經有了我必須使用的certificate.cer文件。我不明白與Bouncy Castle的部分。另外我沒有任何密碼傳遞給trusted.load(); ????我堅持在這些點上。 – Tvd 2011-04-18 13:29:18