Charles Android 抓包失败SSLHandshake: Received fatal alert: certificate_unknown

前提:
Android使用Charles抓取Https请求的报文时,Android和Charles都正确安装了证书之后出现抓包失败,报错SSLHandshake: Received fatal alert: certificate_unknown,如下图所示:

原因:
安卓7之后调整了安全策略会导致部分手机抓包失败,请参考此链接:https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html

文中提到默认情况下,针对API Level 24及更高版本的应用程序不再信任用户或管理员添加的CA用于安全连接。意思就是就算你在手机上安装了受信任的证书也是没卵用的。

解决办法 一:
前提你的手机上已经正确安装了Charles证书:

在你的AndroidManifest.xml文件中添加如下配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                ... >
...
</application>
</manifest>

在res目录下新建一个xml文件夹,之后在res/xml/路径下新建文件network_security_config.xml

res/xml/network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
        <domain includeSubdomains="true">你要抓取的域名</domain>
        <trust-anchors>
        <certificates src="user"/>//信任用户自己安装的证书
        </trust-anchors>
    </domain-config>
</network-security-config>

解决办法 二:
手机上是否有装证书都可以使用下面的方法:

在你的AndroidManifest.xml文件中添加如下配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                ... >
...
</application>
</manifest>

在res目录下新建一个xml文件夹,之后在res/xml/路径下新建文件network_security_config.xml

res/xml/network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
        <domain includeSubdomains="true">你要抓取的域名</domain>
        <trust-anchors>
        <certificates src="@raw/证书文件名"/>
        </trust-anchors>
    </domain-config>
</network-security-config>

在res目录下新建一个raw文件夹,将手机上安装的证书文件放入res/raw/目录下,证书格式:pem,ca等(chales的话就是将你在手机浏览器打开http://charlesproxy.com/getssl下载的证书放入即可),步骤2中的证书文件名,就是你放入res/raw/目录下文件的名字

配置完重新运行项目,就可以看到报文了
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值