Android WebViewの証明書エラーの無視

Android WebViewの証明書エラーの無視

説明

WebViewClient.onReceivedSslError で handler.proceed() を呼ぶと、TLS証明書エラーがあってもWebViewはページの読み込みを続けます。本番環境では中間者攻撃につながり、信頼できないコンテンツを正規のページと誤認させるおそれがあります。

想定される影響

  • HTTPS通信の盗聴や改ざん
  • ログイン情報やセッショントークンの漏えい
  • 悪意あるスクリプトの挿入

対処方法

  1. 証明書エラーが発生したら handler.cancel() を呼び、読み込みを中止してください。
  2. 開発サーバーのテスト証明書が必要な場合は、Network Security Configの debug-overrides でデバッグビルドだけにテストCAを信頼させてください。証明書エラー自体を無視しないでください。
  3. 証明書ピンニングが必要な場合は、Android Network Security Configを確認してください。

例

変更前

java
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed();
}

変更後

java
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.cancel();
}

解説:

  • 変更前: handler.proceed() がTLS証明書エラーを無視し、ページの読み込みを続けます。
  • 変更後: 証明書エラー時に handler.cancel() で読み込みを中止します。

参考資料