2017-09-29 3 views
2

je suis en train de faire https demande à l'aide volley mais je reçois cette réponse d'erreurHTTPS Android demande avec Volley

javax.net.ssl.SSLHandshakeException:> java.security.cert.CertPathValidatorException: ancre de confiance pour la certification> chemin non trouvé.

Que signifie ce message?

Répondre

0

Le message apparaît parce que vous devez ajouter un certificat à votre demande https. Pour ce faire, ajoutez HurlStack à votre demande en volley. Pour la getSSLSocketFactory, utilisez cette fonction.

private SSLSocketFactory getSSLSocketFactory(Context context) 
      throws CertificateException, KeyStoreException, IOException, 
      NoSuchAlgorithmException, KeyManagementException { 

// the certificate file will be stored in \app\src\main\res\raw folder path 
     CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
     InputStream caInput = context.getResources().openRawResource(
       R.raw.YourCertificate); 

     Certificate ca = cf.generateCertificate(caInput); 
     caInput.close(); 

     KeyStore keyStore = KeyStore.getInstance("BKS"); 

     keyStore.load(null, null); 
     keyStore.setCertificateEntry("ca", ca); 

     String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
     TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
     tmf.init(keyStore); 

     TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf 
       .getTrustManagers()); 

     SSLContext sslContext = SSLContext.getInstance("TLS"); 
     sslContext.init(null, wrappedTrustManagers, null); 

     return sslContext.getSocketFactory(); 
    } 

Pour la TrustManager utilisent cette méthode:

private TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) { 
     final X509TrustManager originalTrustManager = (X509TrustManager) trustManagers[0]; 
     return new TrustManager[] { new X509TrustManager() { 
      public X509Certificate[] getAcceptedIssuers() { 
       return originalTrustManager.getAcceptedIssuers(); 
      } 

      public void checkClientTrusted(X509Certificate[] certs, 
        String authType) { 
       try { 
        if (certs != null && certs.length > 0) { 
         certs[0].checkValidity(); 
        } else { 
         originalTrustManager 
           .checkClientTrusted(certs, authType); 
        } 
       } catch (CertificateException e) { 
        Log.w("checkClientTrusted", e.toString()); 
       } 
      } 

      public void checkServerTrusted(X509Certificate[] certs, 
        String authType) { 
       try { 
        if (certs != null && certs.length > 0) { 
         certs[0].checkValidity(); 
        } else { 
         originalTrustManager 
           .checkServerTrusted(certs, authType); 
        } 
       } catch (CertificateException e) { 
        Log.w("checkServerTrusted", e.toString()); 
       } 
      } 
     } }; 
    } 

Enfin dans l'appel RequestQueue le hurlstack:

RequestQueue requestQueue = Volley.newRequestQueue(context, hurlStack); 
    requestQueue.add(Your Request);