2016-10-12 1 views
-2

je le code suivant:Android Essayer de faire confiance à un certificat auto-signé, obtenir un pas d'erreur connexion homologue

AsyncTask asyncTask = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object[] params) { 
      try { 
       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); 

// Example send http request 
       final String url = "https://192.168.1.13:8090/version"; 
       HttpPost httpPost = new HttpPost(url); 
       HttpResponse response = httpClient.execute(httpPost); 
       Log.i("","response is:" + response); 
      }catch (Exception e){ 
       Log.e("","error trying to get:" + e.getMessage()); 
      } 
      return null; 
     } 
    }; 
    asyncTask.execute(); 

Je reçois la question suivante:

10-12 10:53:37.546: E/(24916): error trying to get:No peer certificate 
10-12 10:53:38.890: E/Finsky(18904): [1] com.google.android.vending.verifier.ah.a(713): Verification id=44 error response com.android.volley.NoConnectionError: java.net.UnknownHostException: Unable to resolve host "safebrowsing.google.com": No address associated with hostname 

Qu'est-ce que je fais mal?

+0

'connexion .. refused' suggère votre serveur est en panne. Est-ce vraiment l'écoute du port 8090? Est-ce la bonne adresse IP? Tout pare-feu SW bloquant les connexions? Enfin, si c'est un serveur de développement (PHP, Python) qui est lié à 127.0.0.1, les connexions doivent être locales, et échoueront si elles proviennent d'une autre machine ou IF. Est-ce le cas? –

+0

J'ai réussi à dépasser cela. mais maintenant je reçois une erreur de certificat de non-pair. –

+0

Quel type de serveur utilisez-vous? Il semble que votre connexion soit HTTP, sans cryptage SSL/TLS. –

Répondre

1

J'ai réussi à obtenir la réponse correcte à l'aide de cette méthode:

AsyncTask asyncTask = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object[] params) { 
      HttpsURLConnection conn = null; 
      try { 
       URL url = new URL("https://192.168.1.13:8090/version"); 
       conn = (HttpsURLConnection) url.openConnection(); 
       conn.setSSLSocketFactory(SSLCertificateSocketFactory.getInsecure(0, null)); 
       conn.setHostnameVerifier(new AllowAllHostnameVerifier()); 
       conn.setRequestProperty("Accept-Charset", "UTF-8"); 
       conn.connect(); 
       InputStream response = conn.getInputStream(); 
       BufferedReader br = new BufferedReader(new InputStreamReader(response, "utf8")); 
       StringBuffer sb = new StringBuffer(); 
       String line = ""; 

       while ((line = br.readLine()) != null) { 
        sb.append(line); 
       } 

       String data = sb.toString(); 
       Log.i("","response is:" + data); 
      } catch (MalformedURLException e) { 
       Log.e("","error trying to get conn:" + e.getMessage()); 
      } catch (IOException e) { 
       Log.e("","error trying to get conn2:" + e.getMessage()); 
      } 
      return null; 
     } 
    }; 
    asyncTask.execute();