2016-02-23 20 views
8

私はPlaystoreで1つの問題をマークしています。android webviewでsslを使用せずにhttps urlをロードするには

現在私のアプリケーションでは、webviewがロードリンクであり、https urlを含んでいます。私はこのようにやっているウェブ設定の

:SSL証明書を無視する

web.setWebViewClient(new SSLTolerentWebViewClient());

私は、次のコードを使用しますが、理由は私のアプリを示す証明書playstoreを無視する

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

安全ではないことができます誰も私に示唆どのように私はこれを行うことができます私の WebViewはhttpsのURLを処理することができますし、Playstoreは私のアプリを安全でないとマークしませんか?

+1

なぜSSL認証エラーを無視する必要がありますか? – Bhargav

+0

私たちが読み込んでいないWebページを無視しないので、私はそれを使用していますが、今Playstoreが警告を表示しているので、将来彼らはアプリケーションを拒否するかもしれません。 –

+0

httpsのウェブサイトはSSLを介して通信しなければならないため、SSLのエラーが発生しているかどうかを調べる必要があります。 – Bhargav

答えて

24

To Solve Google Play Warning: WebViewClient.onReceivedSslError handler

必ずしも強制的にhandler.proceed()にする必要はありません。 handler.cancel()もインクルードする必要があります。ユーザーは不自由なコンテンツの読み込みを避けることができます。 WebViewClient.onReceivedSslErrorハンドラの危険な実装を処理するために

のhttpではなくhttpsでウェブページにリンクしてください、次のコード

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

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();トリックをしました。私のために働いた。 – TharakaNirmana

+0

私たちの証明書を組み込み、それを信頼できるキーストアに追加する答えはWeb上に実際に表示されるはずです。この種の脆弱性に対する中間者攻撃を避けるべきです。 – Alex

+0

「SSLTolerent」という名前の功績は魅力的です。 –

-3

を使用しています。これはおそらくhttpsサイトにリダイレクトされます。セキュリティ証明書を無視するようにコードする必要はありません。

+0

はい、私はそれを試みましたが、私がhttpsからsを取り除くことを試みているなら、空白を表示しています。 –

+0

アプリの外に読み込もうとするとどうなりますか?つまり、WebViewを削除するmyWebView =(WebView)findViewById(R.id.webview); myWebView。setWebViewClient(新しいWebViewClient());あなたのアクティビティやあなた自身のwebviewクライアントコードがある場合はそれを使用します。 –

+0

はい、webviewクライアントまたはchromeviewを読み込む際に問題はありませんが、私はアプリの画面でしかそのようにしたくありません –

関連する問題