现在的网站基本都是https,charles是常用的http抓包工具,所以用charles调试https请求是常见的需求。今天分享下如何使用charles调试https请求,以及如何断点。首先安装charles,点击开始记录:浏览器访问一些页面,左侧会显示捕获到的http/https请求:但是此时捕获的是加密内容,这是https机制造成的:服务器会颁发由CA认证的证书,其中包含公钥,服务器自己保存私钥。通过这种机制,完成对称密钥的传输和身份的认证,然后对数据进行加密传输。中间人拿到的数据自然是加密过的,也就是上图中的乱码:抓包工具怎么才能拿到明文数据呢?不能用服务器的证书连接服务器吗?就是这样:Charles使用服务器的证书与服务器通信,然后把自己的证书交给浏览器,这样他就可以解密传输的内容,得到明文数据。点击Proxy的SSL代理设置:给juejin添加一个https代理:这个是juejin之前的证书:代理之后换成Charles的证书,但是会提示不安全:这是因为系统有地方存储所有根证书,证书只有在存在并且在那里被信任时才是安??全的。点击help>SSLProxying>InstallCharlesRootCertificate,将其安装到系统的keychain中:更改为alwaystrust:此时浏览器会标记为安全:会在中看到明文的http请求和响应内容charles:这个过程的原理是这张图:现在我们可以抓https包了,但是还不够。我们现在只能看着它。很多时候,我们希望修改请求和响应的内容。这时候我们就需要用到断点功能了:右键请求,勾选断点:然后打开断点:刷新页面就会发现断了:下面三个按钮分别代表取消、终止、执行修改后的请求。可以更改url,添加header,更改请求内容和cookie:点击execute后,就会发送请求。之后,响应仍然会中断。这时候可以用同样的方法修改response:比如??我修改了标题,点击execute后,我看到的网页就是修改后的:这样我们就可以断点调试请求的https了。为什么可以实现断点功能呢?这很容易理解。如何请求和如何响应由Charles控制。实现断点和编辑功能不是很简单吗?可能有同学会问,移动端怎么调试?其实都是一样的,只是移动端还需要将Charles证书安装到自己的系统中。需要点击安装Charles证书到手机:会提示在手机上设置代理服务器,然后下载Charles证书:原理和我们PC端一样下载Charles客户端的证书是一样的,后续的流程也是一样的。另外,chrome还有一个浏览器插件,可以更细粒度的控制代理,叫做SwitchyOmega:可以配置几个代理服务器,比如Charles的代理服务器:这个可以在Proxy>ProxySetting中配置Charles:然后你可以配置使用什么url和使用什么代理,或者不使用代理直接连接:当你有多个代理服务器,或者想控制一些页面通过代理而其他页面不通过时,你可以使用这个插件来控制。总结使用Charles调试https请求是一个常见的需求。需要在本地系统安装Charles的证书,然后信任它,就可以抓取明文数据了。其原理是Charles会使用服务器的证书与服务器通信,然后将自己的证书发送给浏览器。Charles还有断点调试功能,可以修改请求和响应的数据。手机https调试也是一样的原理,只是需要配置proxy和certificate。如果你想切换代理服务器或者设置一些页面不走代理,可以使用Chrome插件SwitchyOmega来控制。断点调试https请求还是很有意义的,比如改header和body看看会有什么效果。使用场景有很多。
