WireShark抓Https数据流程分析

时间:2024-03-19 20:15:57

由于工作上的需要,要使用WireShark来抓包;第一次使用WireShark,有点慌,只能慢慢摸索了..

研究了一个下午,终于有点门道了,mark一下。

WireShark使用步骤:

1.打开WireShark,然后双击“以太网”,我这边是使用“以太网”捕获数据

WireShark抓Https数据流程分析

 

2.打开谷歌浏览器,进入百度,然后随便搜索什么,以为百度是https请求

3.选择过滤,我的表达式:ssl && (ip.dst == 180.101.49.111||ip.src == 180.101.49.111)

4.然后WireShark界面出现一系列的ip地址和请求协议,如图:

WireShark抓Https数据流程分析

5.这些莫名奇妙的数据到底代表啥呢,让我娓娓道来...φ(゜▽゜*)♪

6.TLS整个握手过程如下:

WireShark抓Https数据流程分析

敲黑板,划重点了,接下来就很关键了...

接下来就重点介绍下TLS握手过程

1.Client Hello

这是TLS握手的第一步

客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下:
    • 支持的最高TSL协议版本version,从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2,当前基本不再使用低于 TLSv1 的版本;
    • 客户端支持的加密套件 cipher suites 列表, 每个加密套件对应前面 TLS 原理中的四个功能的组合:认证算法 Au (身份验证)、**交换算法 KeyExchange(**协商)、对称加密算法 Enc (信息加密)和信息摘要 Mac(完整性校验);
    • 支持的压缩算法 compression methods 列表,用于后续的信息压缩传输;
    • 随机数 random_C,用于后续的**的生成;
    • 扩展字段 extensions,支持协议与算法的相关参数以及其它辅助信息等,常见的 SNI 就属于扩展字段,后续单独讨论该字段作用。

WireShark抓Https数据流程分析

2.Server Hello

服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法compression method、随机数 random_S 等,其中随机数用于后续的**协商

WireShark抓Https数据流程分析

3.Certificate

服务器端配置对应的证书链,用于身份验证与**交换

WireShark抓Https数据流程分析

4.Server Key Exchange

当 server certificate 没有携带足够的信息时,发送给客户端以计算 pre-master,如基于DH 的证书,公钥不被证书中包含,需要单独发送

WireShark抓Https数据流程分析

5.Server Hello Done

服务器返回此协议数据,告诉客户端已经完成

6.Client Key Exchange

合法性验证通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器

WireShark抓Https数据流程分析

7.Change Cipher Spec

客户端通知服务器后续的通信都采用协商的通信**和加密算法进行加密通信

8.Encrypted Handshake Message

服务器也结合所有当前的通信参数信息生成一段数据并采用协商** session secret 与算法加密并发送到客户端

9.TLS握手完成

客户端计算所有接收信息的 hash 值,并采用协商**解密Encrypted Handshake Message,验证服务器发送的数据和**,验证通过则握手完成。

抓包 HTTPS 通信主要包括三个过程:TCP 建立连接、TLS 握手、TLS 加密通信,主要分析 HTTPS 通信的握手建立和状态等信息。

**交换算法介绍:

**交换算法目前常用的有RSA和Diffie-Hellman。
对于**交换使用RSA算法,pre-master-secret由客户端生成,并使用公钥加密传输给服务器。
对于**交换使用Diffie-Hellman算法,pre-master-secret则通过在Key Exchange阶段交换的信息,由各自计算出pre-master-secret。所以pre-master-secret没有存到硬盘,也没有在网络上传输,wireshark就无法获取session key,也就无法解密应用数据。