2014-10-05 238 views
2

我正在更新android應用程序的Web服務URL,我們正在使用https協議。我看到我的當前https網址正在工作,但現在我們正在遷移到新域,然後它正在創建問題。javax.net.ssl.SSLException:證書中的主機名與Android中不匹配

我已經檢查了很多線程,如javax.net.ssl.SSLException: hostname in certificate didn't match android,但沒有找到任何好的答案,主要是回答繞過此安全性或允許所有。

javax.net.ssl.SSLException:主機名的證書不匹配:提前

//HttpGet getMethod = new HttpGet(String.format(httpURL)); 
HttpGet getMethod = new HttpGet(httpURL); 
DefaultHttpClient client = new DefaultHttpClient(); 
ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
HttpParams params = client.getParams(); 
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 60000); 
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000); 
client.setParams(params); 
responseBody = client.execute(getMethod, responseHandler); 
responseBody = responseBody.trim(); 

感謝。

+0

您是否在瀏覽器中嘗試了相同的網址,並且您是否遇到任何證書錯誤? – Panther 2014-10-05 08:59:43

+0

@Panther沒有錯誤,它在瀏覽器中工作 – 2014-10-05 09:36:21

回答

2

如果它在瀏覽器中運行,但在應用程序中不起作用,則可能是缺少SNI支持的問題,請參見Why does android get the wrong ssl certificate? (two domains, one server)

+0

是的,它是在瀏覽器中,而不是在應用程序中。我們是否也必須在應用程序中爲這個ssl連接保留一些證書? – 2014-10-05 09:37:54

+0

不,您必須使用支持SNI的東西,或者您必須爲HTTPS服務器分配一個IP地址,以便您不需要使用SNI。有關更多詳細信息,請參閱鏈接問題 – 2014-10-05 10:58:54

5

看來最好的解決方案是使用HttpsUrlConnection而不是HttpGet。

URL url = new Url(httpURL); 
HttpURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); 
urlConnection.setReadTimeout(60000); 
urlConnection.setConnectTimeout(60000); 
urlConnection.setRequestMethod("GET"); 
urlConnection.setDoInput(true); 

urlConnection.connect(); 

然後使用InputStream獲取響應正文。

InputStream inputStream = urlConnection.getInputStream(); 
相關問題