Cha*_*lan 10 ssl certificate webview android-4.4-kitkat
当访问具有不受信任证书的https URL时,我可以绕过SSL错误,以下代码使用WebView以下版本的KitKat
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于KitKat浏览器.有什么想法可以解决吗?
小智 5
我最近也遇到了这个问题,这没有记录,但似乎在 Android 4.4 KitKat 上调用方法 onReceivedSslError 取决于 SSL 错误的类型。我检查了这两种情况:
如果 SSL 错误是由于自签名服务器证书引起的,它会像在旧版本中一样调用 Android KitKat 4.4 中的 onReceivedSslError 方法。
但是,如果 SSL 错误原因是错误的证书链(LogCat 显示消息:“无法验证证书链,错误:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚。”,则 onReceivedSslError 不是在KitKat中调用,因为它在旧的Android版本中被调用,因此在4.4中不能忽略或绕过错误。这是我的情况,我不知道这是一个错误还是故意防止MITM攻击,但是我没有找到解决此问题的编程方式。
对我来说,潜在的问题是 Web 服务器没有公开完整的证书链,而只公开了最后一个证书,让设备负责验证完整链,前提是它具有存储在设备证书存储中的所有证书,这是Android 设备并非如此。您可以通过以下方式确定这是否也是您的问题:
a) 使用在线证书检查器检查证书链,例如:http : //www.digicert.com/help/
b) 使用 openssl 来验证收到的证书链: openssl s_client -showcerts -connect :443 你可以在那里看到证书链,它应该包含两个或多个证书,如果结果以这样的结尾:验证返回码:21(无法验证第一个证书),您可能会遇到与我类似的问题。
解决方案是修复 Web 服务器配置,以便服务器向主机公开完整的证书链。
在 Android 4.4 上运行时,您的应用的行为可能会有所不同,尤其是当您更新应用的targetSdkVersion时更新为“19”或更高版本时。
\n\nWebView底层的代码已升级为基于 Chromium 源代码的现代快照。
\n\n这带来了各种性能改进、对新 HTML5 功能的支持以及对WebView内容的远程调试的支持。此升级的范围意味着如果您的应用程序使用 WebView,则在某些情况下它的行为可能会受到影响。尽管已知的行为更改已记录在案,并且仅当您更新应用程序的targetSdkVersion时才会影响您的应用程序更新为“19”或更高\xe2\x80\x94 时才会影响您的应用程序,但新的 WebView 在“怪异模式”下运行,以在目标应用程序中提供一些旧功能API 级别 18 及更低\xe2\x80\x94\xe2\x80\x94 您的应用程序可能依赖于以前版本的 WebView 的未知行为。
\n\n因此,如果您现有的应用程序使用 WebView,请务必尽快在 Android 4.4 上进行测试并参考Migrating to WebView in Android 4.4,了解当您将 targetSdkVersion 更新为“19”或更高。
\n\n\n