2017年3月12日 星期日

Android如何正確處理 WebView SSL 錯誤處理

●官方說明:
自 2016 年 11 月 25 日起,只要新的應用程式或更新內容含有這個SSL Error Handler安全性漏洞,一律禁止在 Google Play 發佈。

如要解決這個問題,請更新應用程式的程式碼,在伺服器提供的憑證符合預期時叫用 SslErrorHandler.proceed(),不符合預期時則叫用 SslErrorHandler.cancel()。


●以往大家都在WebView的onReceivedSslError事件中直接忽略檢查,使應用程式含有SSL Error Handler安全性漏洞。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    handler.proceed();
}


●現在應該要正確的處理onReceivedSslError事件,才可在 Google Play 發佈。
@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    SslCertificate sslCertificate = error.getCertificate();

    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("SSL 憑證錯誤");
    builder.setMessage ("無法驗證伺服器SSL憑證。\n仍要繼續嗎?");
    builder.setPositiveButton("繼續", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });

    final AlertDialog dialog = builder.create();
    dialog.show();
}