首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖onReceivedSslError不适用于Android KitKat网页视图

覆盖onReceivedSslError不适用于Android KitKat网页视图
EN

Stack Overflow用户
提问于 2014-03-18 17:55:43
回答 3查看 7.9K关注 0票数 10

使用KitKat版本以下的WebView访问具有不受信任证书的https URL时,我可以绕过SSL错误

代码语言:javascript
复制
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

                    handler.proceed();
}

但它不适用于KitKat浏览器。有什么办法可以解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2014-08-21 17:26:51

我最近也遇到了这个问题,没有文档记录,但似乎在Android4.4ssl上调用方法onReceivedSslError取决于KitKat错误的类型。我检查了这两个案例:

  • 如果SSL错误是由自签名服务器证书引起的,它会调用Android KitKat 4.4中的onReceivedSslError方法,就像在旧版本中一样。但是,如果SSL错误的原因是错误的证书链(LogCat显示消息:“无法验证证书链,错误:找不到证书路径的java.security.cert.CertPathValidatorException:信任锚。”),则onReceivedSslError不会在KitKat中调用,因为它在较早的安卓版本中被调用,因此在4.4中无法忽略或绕过该错误。这就是我的情况,我不知道这是一个bug,还是为了防止MITM攻击而故意做的,但我没有找到一种程序化的方法来解决这个问题。

对我来说,潜在的问题是web服务器没有公开完整的证书链,而只公开了最后一个证书,把验证整个证书链的责任留给了设备,前提是它将所有证书都存储在设备证书存储中,而Android设备不是这种情况。您可以通过以下方式确定这是否也是您的问题:

a)使用在线证书检查器检查证书链,例如:http://www.digicert.com/help/

b)使用openssl验证收到的证书链: openssl s_client -showcerts -connect :443您可以在那里看到证书链,它应该包含两个或更多证书,如果结果以类似以下内容结束:验证返回代码: 21 (无法验证第一个证书),您可能会遇到与我类似的问题。

解决方案是修复web服务器配置,以便服务器向主机公开完整的证书链。

票数 5
EN

Stack Overflow用户

发布于 2014-04-09 14:59:40

你的应用程序在Android4.4上运行时可能会有不同的表现,特别是当你将应用程序的targetSdkVersion更新到"19“或更高的时候。

WebView类和相关API的底层代码已经升级为基于Chromium源代码的现代快照。

这带来了各种性能改进、对新HTML5特性的支持以及对WebView内容的远程调试的支持。这次升级的范围意味着如果你的应用程序使用WebView,它的行为在某些情况下可能会受到影响。尽管已知的行为变化被记录在案,并且只有当你将你的应用程序的targetSdkVersion更新到"19“或更高时才会影响你的应用程序--新的WebView在”怪癖模式“下运行,在目标API18和更低的应用程序中提供一些遗留功能-但你的应用程序可能依赖于以前版本的WebView的未知行为。

因此,如果你现有的应用程序使用WebView,重要的是你尽快在Android4.4上测试,并咨询Migrating to WebView in Android 4.4,了解当你将targetSdkVersion更新到"19“或更高版本时,你的应用程序可能会受到什么影响。

Source

票数 1
EN

Stack Overflow用户

发布于 2014-04-10 10:06:57

你试过这样的东西吗?

代码语言:javascript
复制
    mWebView.setWebViewClient(new WebViewClient()       
    {
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed(); // Ignore SSL certificate errors
        }
    });
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22475761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档