Intermittent PeerUnverifiedException: нет сертификата peer с клиентом Android

Я пытаюсь достичь Android ↔ Apache связи с помощью HTTPS, но я получаю ошибку ниже. Я испытываю проблему с перерывами, примерно в 30% случаев.

javax.net.ssl.sslPeerUnverifiedException: No peer certificate 

Я искал в Интернете, но любой ответ мне помог …

Вот мой Android-код:

 http_post = new HttpPost(Utils.IP_ADDRESS); http_post_data = new ArrayList<NameValuePair>(); http_post_data.add(new BasicNameValuePair("regId", regid)); http_post_data.add(new BasicNameValuePair("email", globals.userInfo.mail)); http_post_data.add(new BasicNameValuePair("pass", globals.userInfo.pass)); http_post.setEntity(new UrlEncodedFormEntity(http_post_data)); HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, Utils.TIMEOUT_CONNECTION); HttpConnectionParams.setSoTimeout(httpParameters, Utils.TIMEOUT_SOCKET); http_client = new DefaultHttpClient(httpParameters); response = http_client.execute(http_post); String responseBody = EntityUtils.toString(response.getEntity(), GlobalsSingleton.applicationCharset); 

У меня есть сертификат GoDaddy. Итак, что мне нужно изменить на моем сервере или Android-коде, чтобы устранить это?

Я смог решить эту проблему самостоятельно, перезапустив эмулятор или создав новый эмулятор и запустив проект в новом эмуляторе.

Замените x509TrustManager в сокете. Оберните вас клиентом следующим образом:

 public static org.apache.http.client.HttpClient wrapClient(org.apache.http.client.HttpClient base) { try { SSLContext ctx = SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} }; ctx.init(null, new TrustManager[] { tm }, null); SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("https", 443, ssf)); ThreadSafeClientConnManager mgr = new ThreadSafeClientConnManager(registry); return new DefaultHttpClient(mgr, base.getParams()); } catch (Exception ex) { ex.printStackTrace(); return null; } } 
Intereting Posts