自 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();
}