2013-09-05 2 views
2

Я пытаюсь пройти аутентификацию через Last.fm's API.Проблема с сертификатом SSL: «Отсутствие сертификата сверстника»

На Android 4.3 он работает только делая

HttpPost post = new HttpPost("https://ws.audioscrobbler.com/2.0/"); 
post.setEntity(new UrlEncodedFormEntity(params)); 

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(post); 

, но на 2.3.3 я получаю

javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 

Тогда я попробовал решение при here:

HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; 

DefaultHttpClient client = new DefaultHttpClient(); 

SchemeRegistry registry = new SchemeRegistry(); 
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); 
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); 
registry.register(new Scheme("https", socketFactory, 443)); 
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry); 
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams()); 

// Set verifier  
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);   

HttpPost post = new HttpPost("https://ws.audioscrobbler.com/2.0/"); 
post.setEntity(new UrlEncodedFormEntity(params)); 

HttpResponse response = httpClient.execute(post); 

но я по-прежнему получают ту же ошибку.

Тогда я попытался that:

HttpParams httpParams = new BasicHttpParams(); 
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1); 
HttpProtocolParams.setContentCharset(httpParams, HTTP.DEFAULT_CONTENT_CHARSET); 
HttpProtocolParams.setUseExpectContinue(httpParams, true); 

SchemeRegistry schReg = new SchemeRegistry(); 
schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); 
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(httpParams, schReg); 

DefaultHttpClient httpClient = new DefaultHttpClient(conMgr, httpParams); 

HttpPost post = new HttpPost("https://ws.audioscrobbler.com/2.0/"); 
post.setEntity(new UrlEncodedFormEntity(params)); 

HttpResponse response = httpClient.execute(post); 

и снова не удалось.

Любой может помочь?

+0

испОльзОвание 2.3.3 эмулятор или устройство? – Varun

+0

Прибор: Samsung Galaxy S1 – jul

+0

Быстрый тест. Можете ли вы открыть URL-адрес в браузере Galaxy S - https://ws.audioscrobbler.com/2.0/ с 'https: //' перед ним – Varun

ответ

1

Похоже, что существует некоторая проблема с возвратом сертификатов с сервера ИЛИ, возможно, кейстор системы android не имеет соответствующих корневых сертификатов для проверки и завершения рукопожатия.

Рассматривая сайт certificate chain information для сайта, упомянутого в вопросе, мне кажется, что цепочка неправильно отсортирована.

Вы можете попробовать ответ here

Смежные вопросы