1. Wireshark
1. 打开捕获选项
image.png2. 设置过滤器
image.png3. 点击上一步的开始,然后访问该域名的url地址,可以看到tcp三次握手了ssl/tls握手
image.png4. 在捕获结果中过滤(填好过滤条件,按enter)
image.png2. Charles
激活:
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
现在基本都是https了,http没什么好说的。
1. 安装证书
image.png2. 添加到信任
image.png3. 添加要抓包的域名的ssl代理设置
image.pngimage.png
4. 访问要抓包的url
需要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox 浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。
image.png
image.png
5. 原理
5.1 https 简单原理
首先必须知道https的原理,https的简单过程是:
server将自己的域名、公钥等信息给到ca机构生成证书,ca机构会用所有的信息按一定算法生成一个hash,然后按机构自己的私钥加密,然后把证书给服务器,客户端来访问的时候,服务器会让客户端下载一个证书,下载证书后,首先要验证签名是否正确,浏览器(系统)有维护一套ca机构的公钥,首先先根据颁发证书的机构找到公钥,然后解密到哈希,然后根据证书的约定的算法计算hash是否一致,一致则证明证书是正确的,不是中间人骗子,ssl握手成功之后双方会根据生产的pre-master key(这个会用证书里面的服务器公钥加密,传给服务器)和约定的算法进行计算,算出session key,即加密数据的对称密钥。以后数据传输都用此密钥。
具体可以看我这篇博客细说HTTPS。
5.2 Charles如何做到?
本来https已经是基本无解了,用ca的私钥加密的hash,完全没有办法假冒证书的。
Charles的思路是对用户的浏览器冒充服务器,对服务器冒充客户端,这样做有个前提,就是你必须先安装并信任它的根证书。当你信任它的根证书之后,它就可以对你要抓包的域名生成一个伪造的证书,这个证书的数字签名是用它的私钥加密的,这样一来,浏览器和服务器建立连接是,其实是先和Charles建立连接,完成一个https的链接过程。而Charles会对服务器伪装是客户端,将你的请求数据转发给服务器,因此,你请求数据是用你和Charles的约定的密钥加密的,所以他可以解密,而响应数据是Charles和服务器约定的密钥加密的,他也可以解密,因此,请求和响应数据就都能看到了。
6. iPhone抓包
可以参考这篇文章十分钟学会Charles抓包(iOS的http/https请求)
补充一点,iPhone安装完证书后还要添加信任:
网友评论