AndroidのWebViewのSSL 'セキュリティの警告'
-
26-09-2019 - |
質問
私は、クライアントのためのアプリケーションのテストバージョンを構築しています。このアプリの一部は、SSLベースのサイトに出て呼び出すのWebViewを使用しています。次に、クライアントは、証明書の名前は、FQDNと一致しないテストドメインを提供してきました。残念ながら、彼らが提供する位置に一致していることを証明書ではありません。 :(
私は(ない生産使用のために、再び - ちょうどテスト目的のために)1行のコードでコンパニオンのiOSアドホックアプリ上でこの問題を回避働いています。私は、Android OS上で同様の情報で検索しましたが、私はここや他の場所で見てきたソリューションは、比較することによって、私の頭のスピンに大きな時間を作るのに十分です!
この問題を回避する簡単な方法はありますか?でもユーザー向けの設定はどこかに隠れて?
手がかり感謝!
解決
WebViewClientを作成し、このようになりますどのonReceivedSslErrorを処理します:
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error)
Insideは、このコールバックあなただけhandler.proceed()
を呼び出すことができますし、ページの読み込みを継続していきます。あなたはこのコールバックを処理し、proceed()
メソッドを呼び出していない場合は、デフォルトの動作がない負荷にページのためになります。
他のヒント
SSLエラーハンドラのためのGoogleの新しいセキュリティポリシーの更新をに従って更新答えは、このAndroidの開発者<のhref = "https://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedSslError(androidを参照してください。 webkit.WebView、%20android.webkit.SslErrorHandler、%20android.net.http.SslError)」のrel = "nofollowを">ヘルプセンターの記事でます。
私たちの悪意のある動作のポリシーに違反するため、Googleのプレイ上のアプリケーションの防止除去のために適切にSSL証明書の検証を処理するには、
、呼び出しSslErrorHandler.proceed()サーバによって提示された証明書は、あなたの期待を満たし、かつSslErrorHandler.cancelのinvoke()いつでもそう。
にコードを変更たとえば、私が確認しているメイクのユーザーにアラートダイアログを追加すると警告グーグルもはやショーを思わます。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
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?";
builder.setTitle("SSL Certificate Error");
builder.setMessage(message);
builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.proceed();
}
});
builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
handler.cancel();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}