前序:http协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份;
https是运行在ssl/tls之上的http协议,ssl/tls运行在tcp之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。tls/ssl中使用了非对称加密,对称加密以及hash算法。
现在很多网站为了安全,都采用了绿色链接,那对于很多开发者,可能想看一些信息,或者对一些线上问题的排查就产生了一定的困扰,所以本文就讲一下如何利用charles对https抓包?
解决思想
- charles官网提供了一个根证书,并且可以自动根据charles生成一个签名的服务器证书。
- 客户端上安装好这个根证书,然后让操作系统信任他。
总结:
charles
扮演一个代理服务器,那么所有客户端请求的服务器证书就是charles
自动生成的代理服务器证书。如果charles
的根证书已被信任,这个自动生成的代理服务器证书是有效的,那么客户端和charles
的tls
握手就可以顺利完成。
操作步骤
1、先用socket模块,在代理端口监听,一旦有客户端连接就新开一个线程处理连接
混合代理判断数据包是http还是https的唯一方法,就是浏览器器如果发送https包,在传输前会先向代理发送一个CONNECT请求,通过第一个数据包,可以判断接下来的数据是https还是http包。
2、手机中设置代理,这一步和抓http的方式一样。
3、安装证书。(这一步必须建立在第二步的基础上,否则手机中无法下载charles根证书)
3.1、手机上安装charles根证书。
在手机浏览器中打开charles根证书下载网址:chls.pro/ssl 。
会出现这样的界面,点击继续安装,然后去设置里的描述文件管理中信任。
3.2、电脑上安装根证书
在charles的help菜单中安装;完成后去系统的钥匙串访问中信任;
如果有小伙伴在这一步出现了问题,如:
或者在钥匙串中,找不到证书,可以尝试如下操作:
再重复:
然后去系统的钥匙串访问中信任
4、添加要监视的域名。
这里的端口号在第一步中已经添加默认端口号80,443,8080,所以无需配置
添加完成之后我们就可以对已经添加域名的https协议尽情的抓包了。
5、常见问题
- 出现这种如下情况:如果你的客户端和pc的证书都认证通过,请检查是否对域名进行监视,如果证书未通过请从第一步开始
- 出现这种情况,请检查你的手机是否信任;
ios手机10.0以上需要操作:设置–>通用–>关于本机–>证书信任设置