2017-02-04 6 views
0

Hallo, ich habe ein sehr nerviges Problem mit asynchtpclient in Android. wenn ich versuche, eine Anfrage an den Server zu senden, bekomme ich diesen Fehler:android asynchttpclient javax.net.ssl.SSLHandshakeException: Handshake fehlgeschlagen

onFailure:: javax.net.ssl.SSLHandshakeException: Handshake failed 

Ich versuchte, Postbote und Browser und es funktioniert ohne Probleme und ich Antwort erhalten, aber in App funktioniert es nicht.

Der Server hat gültiges SSL-Zertifikat, ich habe sogar versucht, ssl Validierungsprüfung zu deaktivieren, aber immer noch bekomme ich diesen blöden Fehler.

myapikey ist ein Code, den ich nicht mit dir teilen darf.

MainActivity.java:

if (getSharedPreferences("guest_token", MODE_PRIVATE).getString("gtkn",null) == null){ 
     AsyncHttpClient client = new AsyncHttpClient(true,80,443); 
     client.addHeader("Authorization", "myapikey"); 

     client.setSSLSocketFactory(
       new SSLSocketFactory(getSslContext(), 
         SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)); 

     client.get("https://dev.sarshomar.com/api/v1/token/guest", new TextHttpResponseHandler() { 

      @Override 
      public void onSuccess(int statusCode, Header[] headers, String responseString) { 
       try { 
        JSONObject m_obj = new JSONObject(responseString); 
        String guest_token = m_obj.getJSONObject("msg").getJSONObject("callback").getString("token"); 

        SharedPreferences pref = getSharedPreferences("guest_token", MODE_PRIVATE); 
        SharedPreferences.Editor editor = pref.edit(); 
        editor.putString("gtkn", guest_token); 
        editor.apply(); 

        Log.d("onSuccess_token: ", guest_token); 
        Toast.makeText(getApplicationContext(),guest_token,Toast.LENGTH_LONG).show(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show(); 

       } 

      } 

      @Override 
      public void onFailure(int statusCode, Header[] headers, String errorresponse, Throwable throwable) { 
       throwable.printStackTrace(); 
       Log.d("onFailure: ",throwable.toString()+errorresponse+statusCode+throwable.getLocalizedMessage()); 
      } 

      @Override 
      public void onStart() { 
       // called before request is started 
      } 


      @Override 
      public void onRetry(int retryNo) { 
       // called when request is retried 
      } 
     }); 
    } 
} 

public SSLContext getSslContext() { 

    TrustManager[] byPassTrustManagers = new TrustManager[] { new X509TrustManager() { 
     public X509Certificate[] getAcceptedIssuers() { 
      return new X509Certificate[0]; 
     } 

     public void checkClientTrusted(X509Certificate[] chain, String authType) { 
     } 

     public void checkServerTrusted(X509Certificate[] chain, String authType) { 
     } 
    } }; 

    SSLContext sslContext=null; 

    try { 
     sslContext = SSLContext.getInstance("TLS"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    try { 
     sslContext.init(null, byPassTrustManagers, new SecureRandom()); 
    } catch (KeyManagementException e) { 
     e.printStackTrace(); 
    } 

    return sslContext; 
} 

Ich bekomme Fehler, ob ich

AsyncHttpClient client = new AsyncHttpClient(true,80,443) 

oder

AsyncHttpClient client = new AsyncHttpClient(); 

Antwort

0

Nach SSLLabs die Website funktioniert nur mit den Kunden unterstütztversuchen 210. Aber nach this bug report unterstützt AsyncHttpClient SNI nicht. So erhalten Sie einen Handshake-Fehler.

+0

Was soll ich tun? Verwenden Sie einen anderen httpclient? –

+0

@ mathias.h: Wenn Sie auf die unmodifizierte Website zugreifen müssen, müssen Sie wahrscheinlich einen anderen HTTP-Client verwenden, der SNI unterstützt. Wenn Sie die Konfiguration der Site ändern können, ändern Sie diese möglicherweise so, dass SNI nicht erforderlich ist. –

0

OK Ich begann mit der Verwendung von Volley anstelle von asyncHttpclient von loopj und es funktioniert wie ein Zauber, also wenn jemand anderes das gleiche Problem hat wie ich volley benutze, ist es ziemlich einfach zu lernen und zu benutzen.

Verwandte Themen