2012-08-29 20 views
7

Cuando quiero abrir una conexión HTTPS obtengo Excepción de SSL. ¿Cómo establecer HttpURLConnection de una manera no es sensible a esta excepción?¿Desactiva la validación del certificado SSL de la conexión HTTPS?

Mi código es:

private String getData() { 
    String response = null; 
    String connection = "https://www.kamalan.com/"; 

    try { 
     URL url = new URL(connection); 
     Log.i(TAG, "Try to open: " + connection); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

     int responseCode = conn.getResponseCode(); 
     Log.i(TAG, "Response code is: " + responseCode); 
     if (responseCode == HttpURLConnection.HTTP_OK) { 
      BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      if (in != null) { 
       StringBuilder strBuilder = new StringBuilder();    
       int ch = 0; 
       while ((ch = in.read()) != -1) 
        strBuilder.append((char) ch); 

       // get returned message and show it 
       response = strBuilder.toString(); 
       Log.i("JSON returned by server:", response); 
      } 

      in.close(); 

     } else { 
      Log.e(TAG, "Couldn't open connection in getResepiItems()"); 
     } 
    } catch (SSLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return response; 
} 
+0

¿Qué dice la Logcat? –

+0

@Morrison Chang Este es el error en el registro cat 'Causado por: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: ancla de confianza para la ruta de certificación no encontrada. –

+1

¿Has visto esta publicación SO: http: //stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection? –

Respuesta

0

seguir el método más adelante, funciona para mí.

 URL url = new URL("Your URL"); 
     HttpsURLConnection urlConnection =(HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(SSLCertificateSocketFactory.getInsecure(0, null)); 
     urlConnection.setHostnameVerifier(getHostnameVerifier()); 
     InputStream is = urlConnection.getInputStream(); 
     OutputStream os = new FileOutputStream(downloadedFile); 
     byte[] data = new byte[1024]; 
     int count; 
     while ((count = is.read(data)) != -1) { 
      os.write(data, 0, count); 
     } 
     os.flush(); 
     os.close(); 
     is.close(); 

El método a continuación para configurar el nombre de host

private HostnameVerifier getHostnameVerifier() { 
     HostnameVerifier hostnameVerifier = new HostnameVerifier() { 
      @Override 
      public boolean verify(String hostname, SSLSession session) { 
       HostnameVerifier hv = 
         HttpsURLConnection.getDefaultHostnameVerifier(); 
       return hv.verify("com.example.com", session); 
      } 
     }; 
     return hostnameVerifier; 
    } 
+0

Funciona ¿cómo? ¿Y por qué? Todas estas tonterías no son más que verificar la sesión contra un nombre de host fijo. El punto, si hay uno, no está indicado. No utilice el formato de cotización para el texto que no se cita, – EJP

Cuestiones relacionadas