2015-04-29 1 views
0

Je suis un peu confus sur la façon d'utiliser les informations d'identification de confiance du système avec OkHttp. J'utilise le code suivant:Android credentials credentials et OkHttp

  SSLContext sslContext = SSLContext.getInstance("TLS"); 
      KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 
      String algo = TrustManagerFactory.getDefaultAlgorithm(); 
      TrustManagerFactory tmf =TrustManagerFactory.getInstance(algo); 
      tmf.init(ks); 
      TrustManager managers[]= tmf.getTrustManagers(); 
      X509TrustManager defaultTrustMgr = null; 

      for (int i = 0; i < managers.length; i++) { 
       if (managers[i] instanceof X509TrustManager) { 
        defaultTrustMgr = (X509TrustManager) managers[i]; 
       } 
      } 
      X509Certificate[] x509Certificates = defaultTrustMgr.getAcceptedIssuers(); 
      sslContext.init(null, managers, null); 

Cependant quand je suis avec Charles je suis encore capable de sniffer le trafic permettant ainsi un homme dans l'attaque du milieu. Comment configurer OkHttp pour utiliser les certificats par défaut fournis avec Android?

Merci, Graeme

Répondre

0

Vous devez configurer explicitement l'usine de prise de OkHttp:

okHttpClient.setSslSocketFactory(sslContext.getSocketFactory()); 

Auparavant OkHttp utilisé l'usine de socket par défaut du système, mais cela posait un problème. En particulier, la configuration de cette fabrique de socket pour prendre en charge NPN et ALPN pour SPDY et HTTP/2 a provoqué le blocage d'autres codes partageant cette fabrique de socket.

+0

Merci pour la réponse. Est-ce que cela utilise les certificats par défaut cependant? Il semble que je peux encore Charles le trafic et le manipuler. – Graeme