网络信息安全|第6章:Wireshark 抓包分析 HTTPS

  • 原创
  • Madman
  • /
  • /
  • 0
  • 1380 次阅读

网络信息安全-min.jpg

Synopsis: 用 Wireshark 抓包来分析如何建立 TCP 连接、TLS 连接

1. Wireshark 入门

Wireshark 官网 下载对应你的操作系统的版本,比如 https://1.as.dl.wireshark.org/win64/Wireshark-win64-3.0.2.exe,然后一直 Next 默认即可

打开 Wireshark 软件后,首先需要确定你待会将要抓包的网卡名,一般是显示数据包最多的那张网卡,如下图所示,然后 双击 此网卡就会开始抓包了:

启动Wireshark

2. TCP 三次握手

请先按照 网络信息安全|第4章:启用 HTTPS 文章所述,开启服务器 192.168.40.123 上 NGINX 的 HTTPS 功能(基于 TLS v1.2)

在浏览器中访问 https://www.wangy.com 后,停止 Wireshark 抓包,并在过滤器中输入 ip.addr == 192.168.40.123 并敲回车键,只查看客户端与此服务器之间的往来数据包:

TCP 三次握手

前三个数据包就是建立 TCP 连接所需的三个步骤了:

💖1. (SYN) 假设客户端想要与服务器建立 TCP 连接,那么客户端首先会发送带 SYN(Synchronize Sequence Number) 标志位的数据包(或者称为 segment),用来告诉服务端它已经准备好可以开始通信了,并且通信将从 sequence number(缩写为 seqX 开始

TCP三次握手 01

💎2. (ACK + SYN) 服务端响应客户端的请求,设置 ACK(Acknowledgement) 标志位,并设置 ACK 的值为 X + 1,表示服务端收到了客户端发来的序列号为 X 的数据包。另外,为了实现网络 全双工通信(full-duplex communication),服务端也需要发送 SYN 给客户端,所以服务端还会为这个响应的数据包再设置 SYN 标志位,并且假设此数据包的序列号为 Y

TCP三次握手 02

👑3. (ACK) 最后,客户端还需要再发送一个设置了 ACK 标志位的数据包给服务端,此数据包的序列号为 Y + 1,表示客户端已接收到服务端发来的序列号为 Y 的响应数据包。客户端这次发送的数据包的序列号为 X + 1,因为客户端发送的第一数据包序列号为 X,那这算是第二个数据包,当然就是 X + 1 啦

TCP三次握手 03

至此,客户端和服务端成功地建立了全双工的 TCP 连接

3. TLS v1.2

3.1 RSA 握手

为了让 Nginx 服务器与客户端握手时,只使用 RSA 算法作为 密钥交换 算法(正式环境中请勿使用 RSA 进行密钥交换),我们需要修改 Nginx 的配置文件:

ssl_ciphers RSA:!aNULL:!MD5:!RC4;

运行 nginx -t 检查配置文件没有错误后,重启 Nginx 服务:

[root@CentOS conf.d]# systemctl restart nginx

此时,再次打开 Wireshark 软件,选择客户端与 Nginx 服务器连接的网卡并双击开始抓包,然后在浏览器中访问 https://www.wangy.com 后,停止 Wireshark 抓包,并在过滤器中输入 ip.addr == 192.168.40.123 and tls 并敲回车键,只查看客户端与此服务器之间基于 TLS 协议相关的数据包:

TLS 1.2 RSA Handshake capture

关于握手的每个步骤的详细解析请查看: http://www.madmalls.com/blog/post/establishing-ssl-tls-secure-connection/#31-rsa

3.2 Diffie–Hellman 握手

为了让 Nginx 服务器与客户端握手时,默认使用 ECDHE 算法作为 密钥交换 算法,我们需要修改 Nginx 的配置文件:

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

运行 nginx -t 检查配置文件没有错误后,重启 Nginx 服务:

[root@CentOS conf.d]# systemctl restart nginx

此时,再次打开 Wireshark 软件,选择客户端与 Nginx 服务器连接的网卡并双击开始抓包,然后在浏览器中访问 https://www.wangy.com 后,停止 Wireshark 抓包,并在过滤器中输入 ip.addr == 192.168.40.123 and tls 并敲回车键,只查看客户端与此服务器之间基于 TLS 协议相关的数据包:

TLS 1.2 Diffie–Hellman Handshake capture

关于握手的每个步骤的详细解析请查看: http://www.madmalls.com/blog/post/establishing-ssl-tls-secure-connection/#32-diffie-hellman

4. TLS v1.3

请先按照 网络信息安全|第5章:让你的 Nginx 支持 TLS v1.3 文章所述,让服务器 192.168.40.123 上的 NGINX 支持 TLS v1.3 协议

然后,再次打开 Wireshark 软件,选择客户端与 Nginx 服务器连接的网卡并双击开始抓包,然后在浏览器中访问 https://www.wangy.com 后,停止 Wireshark 抓包,并在过滤器中输入 ip.addr == 192.168.40.123 and tls 并敲回车键,只查看客户端与此服务器之间基于 TLS 协议相关的数据包:

TLS 1.3 Handshake capture

关于握手的每个步骤的详细解析请查看:http://www.madmalls.com/blog/post/establishing-ssl-tls-secure-connection/#4-tls-v13

未经允许不得转载: LIFE & SHARE - 王颜公子 » 网络信息安全|第6章:Wireshark 抓包分析 HTTPS

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.