ububtu Charles配置https证书

第一步,Charles官网下载deb包,用sudo dpkg -i命令安装,或者按照说明将其添加到软件源,用sudo apt install就能安装,这一点不赘述;

第二步,下载Charles的SSL根证书:Help -> SSL Proxying -> Install Charles Root Certificate,安装后,应该能在home目录的.charles/ca/中找到charles-proxy-ssl-proxying-certificate.cer和charles-proxy-ssl-proxying-certificate.pem两个文件,对这种证书文件格式感兴趣的化,自行问搜索引擎,因为我们这里只是配置,就不补充这个知识了;

第三步,转换格式:终端中执行openssl x509 -outform der -in charles-proxy-ssl-proxying-certificate.pem -out charles-proxy-ssl-proxying-certificate.crt;

第四步,在/usr/share/ca-certificates文件夹下新建一个目录charles,再将转换格式后得到的证书charles-proxy-ssl-proxying-certificate.crt复制到/usr/share/ca-certificates/charles 中;

第五步,在/etc/ca-certificates.conf这个配置文件的最后追加charles/charles-proxy-ssl-proxying-certificate.crt,用sudo update-ca-certificates更新证书,完成后发现/etc/ssl/certs目录中应该多了一个charles-proxy-ssl-proxying-certificate.pem文件,表示成功;

第六步,配置google浏览器,这时候你需要一个叫SwitchyOmega的代理管理插件,把http代理协议端口写成charles默认的8888,ip就填本地ip就好,另外在google浏览器的设置->高级->证书管理->授权中心中添加第四步中复制过的charles-proxy-ssl-proxying-certificate.crt证书,可以重复添加,会提示该证书已添加过,由此证明已经添加成功;

第七步,在Charles中Proxy -> SSL Proxy Settings -> SSL Proxy中设置一个Host为*,Port为443的Location,主要是用来代理所有的HTTPS请求;

第八步,以上完成的话,基本大功告成,在google浏览器中用SwitchyOmega切换至设置的charlse 8888端口的代理,访问一个网站试一试,应该就可以看到Charles能成功抓取HTTP的各种信息了;

到此,即便新手也能知道,Charles在此充当了一个类似代理服务器的角色。只是HTTPS中的SSL涉及到CA根证书的问题,如果不进行设置,Charles显示的response内容只会是一坨加密之后的乱码。

这个设置应该能够解决Charles4.0以上版本的乱码问题,大家可以自行尝试,笔者已经成功解决问题。

配置好这些可以进行抓包了,抓包前注意

Android 7.0 之后抓包 unknown 和证书无效的解决方案(无需改代码)
原因

Android7.0 之后默认不信任用户添加到系统的CA证书:

To provide a more consistent and more secure experience across the Android ecosystem, beginning with Android Nougat, compatible devices trust only the standardized system CAs maintained in AOSP.(文档链接)

也就是说对基于 SDK24 及以上的APP来说,即使你在手机上安装了抓包工具的证书也无法抓取 https 请求

解决方案
一、官方解决方案(需修改代码)
官方文档:https://developer.android.google.cn/training/articles/security-config.html
详细演示:https://blog.csdn.net/mrxiagc/article/details/75329629

二、将抓包软件的证书安装成系统证书(需ROOT)
系统证书目录:/system/etc/security/cacerts/

其中的每个证书的命名规则如下:
<Certificate_Hash>.
文件名是一个Hash值,而后缀是一个数字。

文件名可以用下面的命令计算出来:

openssl x509 -subject_hash_old -in <Certificate_File>

后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
————————————————
版权声明:本文为CSDN博主「ShadowySpirits」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ShadowySpirits/article/details/79756274
https://blog.csdn.net/ShadowySpirits/article/details/79756274

参考内容:

  1. https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

  2. https://blog.csdn.net/roland_sun/article/details/70047201

  3. https://blog.csdn.net/huanghanqian/article/details/52973651

  4. https://blog.csdn.net/moqsien/article/details/79753343

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值