专栏首页流柯技术学院安卓7.0及以上版本抓包https失败解决方法

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为何Android 7.0 以上Charles和Fiddler无法抓取HTTPS包?

    但是,升级了 targetSdkVersion 到 28 后发现在 Android 7.0 以上机型 Charles 抓取 https 包时显示找不到证书,但是...

    软测小生
  • 小米手机安装 charles 证书,提示“没有可安装的证书”

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    周小董
  • Python 爬虫时,高版本 App 如何进行抓包?

    我们都知道 iphone 和低版本 Android 抓包,只需要设置代理和配置证书就可以顺利抓包

    AirPython
  • 你想要的Fiddler抓包实操小技巧

    1.1、工具介绍 fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”fi...

    用户7466307
  • Android高版本http网络请求失败的Cordova配置处理

    问题出现的原因是因为Android高版本(Android 6.0)以上默认使用TLS保护用户信息,详见以下文档: Transport Layer Securi...

    IT晴天
  • 基于PC端的爬取公众号历史文章

    微信后台很多消息未回复:看到时已经回复不了。有问题可以添加我的微信:菜单 ->联系我

    不断折腾
  • 手机APP无法抓包(无法连接服务器)

    小小咸鱼YwY
  • Android端Charles抓包

    杨充
  • 【答疑解惑】为什么你的 Charles 会抓包失败?

    作为一名 Web 开发工程师,天天都会和网络打交道。Charles 作为一款网络抓包工具,几乎成了 Web 开发的标配。

    卤代烃

扫码关注云+社区

领取腾讯云代金券