2012-08-29 11 views
7

जब मैं एक HTTPS कनेक्शन मैं SSL अपवाद मिल खोलना चाहते हैं। इस अपवाद के प्रति संवेदनशील नहीं होने के लिए HttpURLConnection को कैसे सेट करें?HTTPS कनेक्शन के SSL प्रमाणपत्र सत्यापन को अक्षम करें?

मेरे कोड है:

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

logcat क्या कहता है सेट के लिए नीचे दी गई विधि? –

+0

@ मॉरिसन चांग यह लॉग बिल्ली में त्रुटि है: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: प्रमाणीकरण पथ के लिए ट्रस्ट एंकर नहीं मिला। –

+1

क्या आपको यह SO पोस्ट दिखाई देता है: http: //stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection? –

उत्तर

0

का पालन करें नीचे दी गई विधि, यह मेरे लिए काम करता है।

 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(); 

होस्टनाम

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

यह कैसे काम करता है? और क्यों? यह सब बकवास एक निश्चित होस्टनाम के खिलाफ सत्र की पुष्टि करने से कहीं ज्यादा कुछ नहीं है। बिंदु, यदि कोई है, तो नहीं बताया गया है। उद्धृत नहीं किए गए पाठ के लिए उद्धरण स्वरूपण का उपयोग न करें, – EJP

संबंधित मुद्दे