• 彻底解决安卓7.0及以上版本抓包https失败


    现象

    android7.0以上的手机https抓包失败(安装了https证书也不行)

    原因

    android7.0+的版本新增了证书验证(系统证书)

    解决办法

    前提:在手机端和电脑端都必须安装https的安全证书
    配置:打测试包时,项目设置默认信任所有证书(系统+用户)
    1.在工程res-xml目录中创建一个名为 network_security_config.xml的文件,文件内容如下:

    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
            <trust-anchors>
                <certificates src="system" overridePins="true" />
                <certificates src="user" overridePins="true" />
            </trust-anchors>
        </base-config>
    </network-security-config>
    

    2.在AndroidManifest里的标签中,添加如下代码:

    android:networkSecurityConfig="@xml/network_security_config"
    

    重新打包项目,然后抓包,即可成功。

    webview抓包失败

    上面可以解决android原生抓包问题,但在android7.0以上的手机,开着网络代理访问不了webview,若要抓包webview,
    需要在webview的WebViewClient中,将一行代码给注释掉:

    super.onReceivedSslError(view, handler, error)
    

    这样是为了忽略掉SSL证书错误,因为开启代理后网络会变得不安全,证书会报错误,webview检测到证书错误之后就不请求任何数据。 注释是为了忽略掉父类的处理,默认执行下去。

    警告

    这样的配置操作是敏感且危险的,只能用于测试环境方便抓包,线上包一定注意要恢复配置。
    后记
    通过查找资料,还有一个方法,通过重载WebViewClient的onReceivedSslError()函数并在其中执行handler.proceed(),即可忽略SSL证书错误,继续加载页面,代码如下:

    WebView webview = (WebView) findViewById(R.id.webview);
    webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            // 不要调用super.onReceivedSslError,因为其包含了一条 handler.cancel(),第一次访问时无法加载,第二次以后可以加载
            // super.onReceivedSslError(view, handler, error);
            // 忽略SSL证书错误,继续加载页面
            handler.proceed();
        }
    }
    
  • 相关阅读:
    4月13日
    java线程池开启多线程
    cenos 7 zookeeper Error contacting service. It is probably not running
    io.lettuce.core.RedisCommandTimeoutException: Command timed out
    springboot java jar指定启动的jar外部配置文件
    ApplicationContextAware
    YYYYMMdd和yyyyMMdd的区别
    gpg加解密异常
    第四周学习及读书笔记
    第3章 直流电机的工作原理及特性 学习笔记(二)
  • 原文地址:https://www.cnblogs.com/linmo/p/13231339.html
Copyright © 2020-2023  润新知