用 Charles 断点调试 HTTPS 请求,原理揭秘

网站建设4年前发布
25 0 0

现在的网站基本都是 https 的,而 charles 是常用的 http 抓包工具,所以用 charles 调试 https 请求是常见的需求。,今天就分享下如何用 charles 调试 https 请求,如何打断点。,首先安装 charles,点击 start recording:,20230306010005981b491714e7812dc730299db7d511a85917bd404,浏览器访问一些页面,这时候左侧就会展示出抓到的 http/https 请求:,2023030601011799b333f47af382e6b4155932788df318af2ef2994,但是这时候抓到的是加密过后的内容,这是 https 的机制导致的:,2023030601000682ed54e1069381d8df04106fa398f75febe28a997,服务端会下发被 CA 认证过的证书,里面包含了公钥,而服务器自己保留私钥,通过这种机制完成对称密钥的传输和身份的认证,之后加密传输数据。,中间人拿到的数据自然都是被加密过的,也就是上图的那些乱码:,20230306010117f2ccf2804525d61611f3478dde490d1547daa4743,那抓包工具怎么能拿到明文的数据呢?,自己用服务端的证书和服务端对接不就行了?,也就是这样:,2023030601030575370a5097666e99ad98479a567fbb00342834917,Charles 自己用服务端的证书来和服务端通信,然后给浏览器一个自己的证书,这样就能解密传输的内容,拿到明文数据了。,点击 Proxy 的 SSL Proxy Setting:,20230306010008723c9c796a6894e3dd1111947529350e04f716679,添加一条对 juejin 的 https 代理:,20230306010119e43003a302b5f52d164337ee8c87e67f65a317298,这是 juejin 之前的证书:,20230306010118d68e01a6672aacc786e69808c3dd2fb802b8ad397,代理之后就换成了 Charles 的证书,但是会提示不安全:,20230306010009125cd6d534d707a6943947ce4bef2dddd70b80651,2023030601001097f72ea7767564bb1340099c725a4661086420670,这是因为系统有一个存放所有根证书的地方,要那里存在并且被信任的证书才是安全的。,点击 help > SSL Proxying > Install Charles Root Certificate,安装到系统的钥匙串中:,2023030601001042a3a454190baf2ffb50741af8af27a4eedb2b702,改为始终信任:,2023030601001121ecaf931181933cb4d395f95f22516bf3fd16201,这时候浏览器里就会标记安全了:,20230306010119b3426ad751753683d0d949c014c968470ac33c932,并且在 charles 里就会看到明文的 http 请求和响应内容:,20230306010306e55d7b768377614dba03453c5bd0b27875a928376,这个过程的原理就是这张图:,20230306010013122c5ac7200f59605a0264711cd79e9ea20e54157,现在能够抓 https 包了,但是还不够,现在只能看,很多情况下我们是希望能修改一下请求和响应内容的,这时候就要用断点功能了:,右键请求,勾选 breakpoints:,2023030601001419410158389131cc3934033c237dee76d350c6557,然后开启断点:,2023030601012203ad02f93b78b23e098749b239fece2a95f98f376,刷新页面你会发现它断住了:,2023030601012257340d9061b58848533998c0033adcbeb6ab8f871,下面三个按钮分别是取消、终止、执行修改后的请求的意思。,上面可以改 url,添加 header,还可以改请求内容和 cookie:,202303060952258164b1033298d5e259e18307899f159faa371f227,点击 execute 之后就会发送请求。,之后响应的时候还会断住,这时候就可以用同样的方式修改响应了:,20230306010017524602d59918916cf32749d4d3f7a7243066e8665,比如我把 title 修改了一下,点击 execute 之后,看到的网页就是修改过后的:,20230306095226081a7a3780472618749237f10078248d3ba352432,这样我们就可以断点调试 https 请求了。,为什么可以实现断点功能呢?,这个很容易想明白,怎么请求、怎么响应都是 Charles 控制的,那想实现一个断点和编辑的功能,岂不是很容易么?,有的同学可能会问,移动端怎么调试呢?,其实是一样的,只不过移动端也要把 Charles 证书安装到自己的系统中,需要点击安装 charles 证书到移动设备:,2023030601012428705bc92b910f476276546cd345d92a25923e552,他会提示你在手机设置代理服务器,然后下载 Charles 证书:,202303060101252705b12462b8242e09694622429dde42d131be443,原理和我们在 PC 端下载 Charles 证书是一样的,后续流程也一样。,除此以外,chrome 还有一个浏览器插件可以更细粒度的控制代理,叫做 SwitchyOmega:,2023030601001876bd58a996964676b4081407ad1072ef85a849130,你可以配置若干个代理服务器,比如 charles 的代理服务器:,20230306010019258ce9944afe89d30970572b7159d7bf05e43b794,这个可以在 Charles 的 Proxy > Proxy Setting 里配置:,2023030601001924fd3fd971884454e9e4192077954c18c0ed54212,然后就可以配置什么 url 用什么代理,或者不用代理直接连接:,2023030609532394754168316ed1c93ad53409204b9e88f8c915535,当你有多个代理服务器,或者想控制有的页面走代理有的不走的时候,就可以用这个插件来控制了。,用 Charles 调试 https 请求是常见的需求,它需要安装 Charles 的证书到本地系统,然后信任,之后就可以抓到明文数据了。,原理就是 Charles 会使用服务器的证书来和服务器通信,然后发一个自己的证书给浏览器。,Charles 还有断点调试功能,可以修改请求和响应的数据。,移动端 https 调试也是同样的原理,只不过需要配置下代理和证书。,如果想切换代理服务器或者设置有的页面不走代理,可以用 Chrome 插件 SwitchyOmega 来控制。,会断点调试 https 请求还是很有意义的,比如改改 header、改改 body,看看会有啥效果,使用场景有很多。

© 版权声明

相关文章