2011-10-27 41 views
0

我添加了SSLFactory和TrustManager類,如here所述。自簽名SSL連接 - Android

我建立一個連接如下:

//does not work 
String url = "https://waprd.uark.edu/web-apps/regr/scheduleofclasses/Main?strm=1123"; 
    //http://bektemirov.com/a/android.php?t=amurica //simple http - works 

HttpClient client = new DefaultHttpClient(clientConnectionManager, params); 
HttpGet get = new HttpGet(url); 
try { 
    HttpResponse response = client.execute(get, context); 
    HttpEntity entity = response.getEntity(); 

    String responseText = EntityUtils.toString(entity); 
    Body.setText(responseText); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

連接失敗這一特定鏈接每次。請指引我正確的方向嗎?

+0

你得到了什麼異常?什麼是完整的堆棧跟蹤? – Cratylus

+0

不受信任的服務器證書: '10-27 01:02:10.620:WARN/System.err(381):javax.net.ssl.SSLException:Not trusted server certificate' '10-27 01:02: 10.630:WARN/System.err(381):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)' '10-27 01:02:10.630:WARN/System。 err(381):在org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLInputStream。 (OpenSSLSocketImpl.java:520)' 10-27 01:02:10.630:WARN/System.err(381):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:461 )' ... – webo

+0

例外說明服務器發送的證書不可信。您配置'SSLContext'的代碼是什麼?請更新OP – Cratylus

回答

0

當您初始化SSLContext時,有一個參數可以傳遞TrustManager數組,您可以在其中定義自己的TrustManager以接受所有數據。一些關鍵的步驟如下:

  1. 子類的SSLSocketFactory

  2. 定製的TrustManager接受所有證書的SSLSocketFactory的子類。

  3. 在SSLSocketFactory的子類中使用定製的TrustManager初始化SSLContext。

  4. 使用HttpParams和ClientConnectionManager創建參數化DefaultHttpClient,它使用SchemeRegistry,您可以在其中向SSLSocketFactory的子類註冊'https'。

這樣,所有的https響應將被你定製的TrustManager類處理。

相關問題