测试或者开发调试的过程中,经常会进行抓包分析,并且装上抓包工具的证书就能抓取 HTTPS 的数据包并显示。由此就产生了一个疑问,为什么抓包工具装上证书后就能抓到 HTTPS 的包并显示呢?不是说 HTTPS 是加密传输的吗?
HTTP 作为一种被广泛使用的传输协议,也存在一些的缺点:
-
无状态(可以通过 Cookie 或 Session 解决);
-
明文传输;
-
不安全;
为了解决 “明文” 和 “不安全” 两个问题,就产生了 HTTPS。HTTPS 不是一种单独的协议,它是由 HTTP + SSL/TLS 组成。
所以要理解 HTTPS 就只需在 HTTP 的基础上理解 SSL/TLS (TLS 是 SSL 的后续版本,现在一般使用 TLS),下面就来了解下 TLS 是什么。
「传输层安全性协议」
(英语:「T」ransport 「L」ayer 「S」ecurity,缩写:「TLS」)及其前身「安全套接层」(英语:「S」ecure 「S」ockets 「L」ayer,缩写:「SSL」)是一种「安全协议」,目的是为互联网通信提供安全及「数据完整性」保障。
TLS 由记录协议、握手协议、警报协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。
-
「记录协议」
规定 TLS 收发数据的基本单位为:记录。类似 TCP 里的 segment,所有其它子协议都需要通过记录协议发出。
-
「警报协议」
的职责是向对方发出警报信息,类似于 HTTP 里的状态码。
-
「握手协议」
是 TLS 里最复杂的子协议,浏览器和服务器在握手过程中会协商 TLS 版本号、随机数、密码套件等信息,然后交换证书和密钥参数,最终双方协商得到会话密钥,用于后续的混合加密系统。
-
「变更密码规范协议」
用于告知对方,后续的数据都将使用加密传输。
TLS 的握手过程:
握手过程抓包显示:
交换密钥的过程为:
-
客户端发起一个请求给服务器;
-
服务器生成一对非对称的公钥(pubkey)和私钥(privatekey),然后把公钥附加到一个 CA数字证书 上返回给客户端;
-
客户端校验该证书是否合法(通过浏览器内置的厂商根证书等手段校验),然后从证书中提取出公钥(pubkey);
-
客户端生成一个随机数(key),然后使用公钥(pubkey)对这个随机数进行加密后发送给服务器;
-
服务器利用私钥(privatekey)对收到的随机数密文进行解密得到 key ;
-
后续客户端和服务器传输数据使用该 key 进行加密后再传输;
先来看看抓 HTTP 包的原理
-
首先抓包工具会提供出代理服务,客户端需要连接该代理;
-
客户端发出 HTTP 请求时,会经过抓包工具的代理,抓包工具将请求的原文进行展示;
-
抓包工具使用该原文将请求发送给服务器;
-
服务器返回结果给抓包工具,抓包工具将返回结果进行展示;
-
抓包工具将服务器返回的结果原样返回给客户端;
-
抓包工具就相当于个透明的中间人,数据经过的时候它一只手接到数据,然后另一只手把数据传出去。
再来看看 HTTPS 的抓包
这个时候抓包工具对客户端来说相当于服务器,对服务器来说相当于客户端。在这个传输过程中,客户端会以为它就是目标服务器,服务器也会以为它就是请求发起的客户端。
-
客户端连接抓包工具提供的代理服务;
-
客户端需要安装抓包工具的根证书;
-
客户端发出 HTTPS 请求,抓包工具模拟服务器与客户端进行 TLS 握手交换密钥等流程;
-
抓包工具发送一个 HTTPS 请求给客户端请求的目标服务器,并与目标服务器进行 TLS 握手交换密钥等流程;
-
客户端使用与抓包工具协定好的密钥加密数据后发送给抓包工具;
-
抓包工具使用与客户端协定好的密钥解密数据,并将结果进行展示;
-
抓包工具将解密后的客户端数据,使用与服务器协定好的密钥进行加密后发送给目标服务器;
-
服务器解密数据后,做对应的逻辑处理,然后将返回结果使用与抓包工具协定好的密钥进行加密发送给抓包工具;
-
抓包工具将服务器返回的结果,用与服务器协定好的密钥解密,并将结果进行展示;
-
抓包工具将解密后的服务器返回数据,使用与客户端协定好的密钥进行加密后发送给客户端;
-
客户端解密数据;
-
HTTPS 不是单独的一个协议,它是 HTTP + SSL/TLS 的组合;
-
TLS 是传输层安全性协议,它会对传输的 HTTP 数据进行加密,使用非对称加密和对称加密的混合方式;
-
抓包工具的原理就是“伪装“,对客户端伪装成服务器,对服务器伪装成客户端;
-
使用抓包工具抓 HTTPS 包必须要将抓包工具的证书安装到客户端本地,并设置信任;
-
HTTPS 数据只是在传输时进行了加密,而抓包工具是接收到数据后再重新加密转发,所以抓包工具抓到的 HTTPS 包可以直接看到明文;
测试或者开发调试的过程中,经常会进行抓包分析,并且装上抓包工具的证书就能抓取 HTTPS 的数据包并显示。由此就产生了一个疑问,为什么抓包工具装上证书后就能抓到 HTTPS 的包并显示呢?不是说 HTTPS 是加密传输的吗?今天这篇文章就来探究下上面这个问题,要解释清楚这个问题,我会通过解答以下两个问题来讲述:HTTP 作为一种被广泛使用的传输协议,也存在一些的缺点:为了解决 “明文” 和 “不安全” 两个问题,就产生了 HTTPS。HTTPS 不是一种单独的协议,它是由 HTTP + SSL/TLS 组成
https
抓包原理
很多工具可以抓包,我用的是Charles for Mac 可以抓包。
抓手机
https
包的过程mac要安装证书并设成新人,先把手机局域网设成和MAC一样的,设置代理IP和443端口,然后手机下载证书并安装,同时设置信任。之后Charles就能抓到手机上的网络请求了。
抓包工具
伪造了自签名证书之后可以成功抓包,并且抓到的是
明文
。
加密层位于http层(应用层)和tcp层(传输层)...
在
https
传输的过程中,我们底层的加密传输协议是ssl/tls.这里所使用的加密算法的秘钥位数(也就是
服务器
所使用的
https
证书的位数)可能是1024/2048或者更高,目前1024位的证书已经被证实是不安全的,需要逐步替换掉。
那么如何通过抓包来查看当前连接所采用的实际加密位数呢(注意,这里是抓包查看,如果是网页我们用浏览器直接访问,点击那个小锁然后进行一系列的操作就可以查看到连接信息了,
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
Fiddler 存在的问题
Fiddler目前还不支持HTTP2协议,无法看到真正的HTTP2报文,这里有些人可能会有疑问,说我明明就用Fiddler抓到了HTTP2协议的报文啊,那是因为Fiddler中间人攻击
服务器
通过协商把协议降级成了HTTP1协议,所以实际上看到的还是的HTTP1的报文,通过下面两个图片可以直观的感受到:
不通过代理,直接访问支持 HTTP2 的服务
通过代理访问,进行抓包
可以看到在通过代理抓包的时候,协议变成了http/1.1。
使用 wireshark 抓
之前我们发过一篇文章讲解了Charles
抓包工具
的基本使用,有需要的小伙伴可以去看上一篇文章。
之前文章讲的数据包主要是http协议,大家可以看到数据包并直接显示具体详细的内容:
打印抓包时出现乱码的可能原因有很多,以下是几个常见的原因:
1. 编码不正确:
抓包工具
默认使用的编码可能与实际编码不一致,导致打印出来的内容出现乱码。可以尝试更改
抓包工具
的编码设置,或手动指定正确的编码。
2. 数据压缩:有些网站或应用程序在传输数据时会进行压缩,导致抓包时看到的内容并非原始数据,而是经过压缩的数据,需要使用相应的解压工具才能还原。
3. SSL加密:有些网站或应用程序使用SSL加密进行数据传输,导致抓包时无法看到
明文
数据,需要使用
HTTPS
抓包工具
进行抓包。
4. 协议不支持:
抓包工具
可能不支持某些协议或数据格式,导致抓包时无法正确解析数据,出现乱码。
以上是一些常见的原因,具体情况需要根据具体的抓包场景进行分析和解决。