2013-02-19 11 views
0

Je sais qu'il y a beaucoup de tutoriels sur internet, mais ils sont au-delà de mes connaissances, car c'est la première fois que j'utilise https. J'ai utilisé la réponse d'emmby ici Trusting all certificates using HttpClient over HTTPS. Mais je ne sais pas comment la mise en œuvre ultérieure va en classe où je me connecte au serveur. Voici un extrait de code dans ma classe HttpsConectionFaire confiance à un certificat autosigné sur https

Log.d("url", url.toString()); 
     HttpsURLConnection httpsConnection; 

     Log.d("HTTP get", "get() called"); 
     try 
     { 
      Log.v("HttpConnection", url.toString()); 
      httpsConnection = (HttpsURLConnection) url.openConnection(); 

      if (request != null) 
      { 
       OutputStreamWriter wr = new OutputStreamWriter(
         httpsConnection.getOutputStream()); 
       // Log.e(TAG, "created outputstream"); 

       wr.write(request); 
       // Log.e(TAG, "request sent"); 
       wr.flush(); 
       wr.close(); 
      } else 
      { 
       Log.e("HttpConnection", "Nothing to send to server"); 
      } 

      // Execute 
      try 
      { 

       InputStream in = new BufferedInputStream(httpsConnection 
         .getInputStream()); 
       responseString = convertStreamToString(in); 
       in.close(); 

J'ai le dossier d'un * dans ma résolution/dossier cru et je suis coincé là.

Répondre

0

Ceci est mon code pour la connexion auto-signé https, il fonctionne très bien pour moi:

 KeyStore trustStore; 
     try { 
      trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 
      trustStore.load(null, null); 
      SSLSocketFactory sf = new EasySSLSocketFactory(trustStore); 
      sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 
      BasicHttpParams params = new BasicHttpParams(); 
      HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); 
      SchemeRegistry registry = new SchemeRegistry(); 
      registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
      registry.register(new Scheme("https", sf, 443)); 
      ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); 
      DefaultHttpClient httpClient = new DefaultHttpClient(ccm, params); 
      HttpsURLConnection.setDefaultHostnameVerifier(sf.getHostnameVerifier()); 
      HttpGet getRequest = new HttpGet(url); 
      BasicHttpParams httpParameters = new BasicHttpParams(); 
      int timeoutConnection = 10000; 
      HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
      int timeoutSocket = 15000; 
      HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
      httpClient.setParams(httpParameters); 
      HttpResponse getResponse = httpClient.execute(getRequest); 
      final int statusCode = getResponse.getStatusLine().getStatusCode(); 
      if (statusCode != HttpStatus.SC_OK) 
      { 
       return null; 
      } 
      HttpEntity getResponseEntity = getResponse.getEntity(); 
      String content = EntityUtils.toString(getResponseEntity); 
      InputStream is = new ByteArrayInputStream(content.getBytes("UTF-8")); 
      return is; 
     } catch (KeyStoreException e1) { 
      e1.printStackTrace(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (CertificateException e) { 
      e.printStackTrace(); 
     } catch (KeyManagementException e) { 
      e.printStackTrace(); 
     } catch (UnrecoverableKeyException e) { 
      e.printStackTrace(); 
     } 
    return null; 
+0

-t-il pas permettre à tous les certificats? – Bobans

+0

yes, est défini par * sf.setHostnameVerifier (SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) * –

+0

Désolé, mais je ne souhaite autoriser qu'un seul certificat. – Bobans

Questions connexes