当访问具有不受信任的证书的 https URL 时,我可以绕过 SSL 错误,使用以下代码和 KitKat 版本以下的 WebView
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
但它不适用于 KitKat 浏览器。有什么解决办法吗?
最佳答案
我最近也遇到了这个问题,这没有记录,但似乎在 Android 4.4 KitKat 上调用方法 onReceivedSslError 取决于 SSL 错误的类型。我检查了这两种情况:
如果 SSL 错误是由于自签名服务器证书引起的,它会像在旧版本中那样调用 Android KitKat 4.4 中的 onReceivedSslError 方法。
但是,如果 SSL 错误原因是错误的证书链(LogCat 显示消息:“无法验证证书链,错误:java.security.cert.CertPathValidatorException:找不到证书路径的信任 anchor 。 ",然后在 KitKat 中没有调用 onReceivedSslError,因为它在旧的 Android 版本中被调用,因此在 4.4 中不能忽略或绕过错误。这是我的情况,我不知道这是一个错误还是故意的以防止 MITM 攻击,但我没有找到解决此问题的编程方法。
对我来说,潜在的问题是 Web 服务器没有公开完整的证书链,而只公开了最后一个证书,将验证完整链的责任留给了设备,前提是它具有存储在设备证书存储中的所有证书,而 Android 设备则不然。 您可以通过以下方式确定这是否也是您的问题:
a) 使用在线证书检查器检查证书链,例如:http://www.digicert.com/help/
b) 使用 openssl 验证收到的证书链: openssl s_client -showcerts -connect :443 你可以在那里看到证书链,它应该包含两个或更多证书,如果结果以这样的结尾: 验证返回码:21(无法验证第一个证书), 您可能会遇到与我类似的问题。
解决方案是修复 Web 服务器配置,以便服务器向主机公开完整的证书链。
关于ssl - 覆盖 onReceivedSslError 不适用于 Android KitKat Web View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22475761/