2016-02-23 26 views
8

Ho segnalato un problema su Playstore e google invia la posta la mia app non è sicura perché uso di SSL.Come caricare https url senza l'uso di ssl nella web view di Android

Attualmente nella mia applicazione ho uno webview che è il link di caricamento e contiene https url.

sulle impostazioni web che sto facendo in questo modo:

web.setWebViewClient(new SSLTolerentWebViewClient());

di ignorare il certificato SSL che uso seguente codice, ma a causa di ignorare certificato playstore mostrando la mia app è sicuro

private class SSLTolerentWebViewClient extends WebViewClient { 
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 
     handler.proceed(); // Ignore SSL certificate errors 
    } 
} 

Can Qualcuno mi suggerisce come posso fare in modo che il mio WebView sia in grado di gestire l'URL https e Playstore non contrassegni la mia app come non sicura?

+1

Perché devi ignorare gli errori del certificato SSL? – Bhargav

+0

Se non lo ignoriamo, la pagina web non viene caricata, quindi sto usando quello, ma ora i playstore mostrano che potrebbero rifiutare l'app in futuro. –

+0

È sbagliato che tu debba scoprire quali errori ssl stai ricevendo e correggerlo, perché un sito Web https DEVE comunicare su ssl e che ciò accada il certificato ssl è molto importante – Bhargav

risposta

24

To Solve Google Play Warning: WebViewClient.onReceivedSslError handler

Non sempre forzare a handler.proceed(); ma devi anche includere handler.cancel(); così l'utente può evitare il caricamento di contenuti non sicuri.

per gestire non sicura implementazione del gestore WebViewClient.onReceivedSslError

utilizzare il seguente codice

webView.setWebViewClient(new SSLTolerentWebViewClient()); 
webView.loadUrl(myhttps url); 

e

private class SSLTolerentWebViewClient extends WebViewClient { 
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(Tab1Activity.this); 
     AlertDialog alertDialog = builder.create(); 
     String message = "SSL Certificate error."; 
     switch (error.getPrimaryError()) { 
      case SslError.SSL_UNTRUSTED: 
       message = "The certificate authority is not trusted."; 
       break; 
      case SslError.SSL_EXPIRED: 
       message = "The certificate has expired."; 
       break; 
      case SslError.SSL_IDMISMATCH: 
       message = "The certificate Hostname mismatch."; 
       break; 
      case SslError.SSL_NOTYETVALID: 
       message = "The certificate is not yet valid."; 
       break; 
     } 

     message += " Do you want to continue anyway?"; 
     alertDialog.setTitle("SSL Certificate Error"); 
     alertDialog.setMessage(message); 
     alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // Ignore SSL certificate errors 
       handler.proceed(); 
      } 
     }); 

     alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       handler.cancel(); 
      } 
     }); 
     alertDialog.show(); 
    } 
} 
+1

handler.proceed(); ha fatto il trucco Ha funzionato per me – TharakaNirmana

+0

Dovremmo davvero vedere sul Web una risposta per incorporare il nostro certificato e aggiungerlo nel keystore fidato. Dovrebbe evitare attacchi man-in-the-middle su questo tipo di vulnerabilità. – Alex

+0

Complimenti per il nome "SSLTolerent" lol .. funziona come un fascino –

-3

Prova il collegamento alla pagina web con http anziché https. Questo probabilmente verrà reindirizzato al sito https. Non è necessario codificare per ignorare il certificato di sicurezza.

+0

sì, ho provato che ma mostrando in bianco se sto cercando con la rimozione di s da https non si carica correttamente. –

+0

Cosa succede se provi a caricare all'esterno dell'app? cioè rimuovere WebView myWebView = (WebView) findViewById (R.id.webview); myWebView.setWebViewClient (new WebViewClient()); dalla tua attività o dal tuo codice cliente webview se ne hai uno. –

+0

Sì, non c'è un problema nel caricamento con client webview o chromeview ma voglio solo nello schermo app questo è il motivo –