在HTTPS系列之密码学基础–证书及签名 中对证书以及签名进行了介绍。本为基于此介绍https的建立过程。

Wireshark

过滤器

捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中
显示过滤器(DisplayFilters):用于在捕捉结果中进行详细查找

捕捉过滤器在抓抱前进行设置,决定抓取怎样的数据;显示过滤器用于过滤抓包数据,方便stream的追踪和排查。

捕捉过滤器仅支持协议过滤,显示过滤器既支持协议过滤也支持内容过滤。

语法

捕捉过滤器

通过Wireshark分析HTTPS(1)_Server

捕捉IP为10.4.1.12或者源IP位于网络10.6.0.0/16,目的IP的TCP端口号在200至10000之间,并且目的IP位于网络 10.0.0.0/8内的所有封包。

通过Wireshark分析HTTPS(1)_客户端_02

显示过滤器
协议过滤

通过Wireshark分析HTTPS(1)_客户端_03

过滤http2协议: http2

通过Wireshark分析HTTPS(1)_客户端_04

内容过滤

通过Wireshark分析HTTPS(1)_服务器端_05

过滤get请求:tcp[20:3] == 47:45:54(16进制形式,tcp头部一般是20字节,所以这个是对payload的前三个字节进行过滤)

通过Wireshark分析HTTPS(1)_客户端_06

分析一次https连接

还是这篇文章https://www.bilibili.com/read/cv7495834


通过wireshark分析其中的一次https连接,过滤规则是ip.addr == 27.115.124.159

通过Wireshark分析HTTPS(1)_服务器端_07

三次握手

(1)客户端发起SYN请求 seq = 0
(2)服务器端进行确认 Ack=1 向客户端发起连接请求 seq = 0
(3)客户端进行确认Ack = 1 经典的三次握手

Client Hello

(4)客户端发送client hello

通过Wireshark分析HTTPS(1)_服务器端_08


(5)服务器端进行确认ACK

Server Hello

(6)服务器端发送Server Hello,生成一个随机数

通过Wireshark分析HTTPS(1)_服务器端_09


(7)客户端进行确认Ack = 1411 Seq = 518

(8)服务器端进行确认

(9)客户端进行确认

Server Certificates

(10)服务器端发送证书Certificate
(11)客户端进行确认

Server Hello Done

(12)服务器密钥交换 Server Key Exchange Server Hello Done

(13)客户端进行确认

ClientKey Exchange Message

(14)客户端进行密钥交换 Change Ciper Spec

通过Wireshark分析HTTPS(1)_服务器端_10

CiperSpec Exchage

(15)服务器端给出session ticket

(16)客户端进行确认

通过Wireshark分析HTTPS(1)_服务器端_11

http请求

(17)http get请求GET /so/zz.gif?url=https%3A%2F%2Fwww.bilibili.com%2Fread%2Fcv7495834&sid=e6352779c080ceddc1bc4c6bbe047b69&token=e46338552974779vcc0/8d0aceerd/dm HTTP/1.1\r\n
(18)服务器端进行响应 200
(19)客户端进行确认

断开链接

(20)服务器端 Close Notify
(21)客户端进行确认
(22)服务器发起FIN请求 冰对客户端进行确认
(23)客户端进行确认
(24)释放连接

https的连接建立过程可参见下图:

通过Wireshark分析HTTPS(1)_Server_12

写在最后

一次简单的https请求竟然有如此复杂的流程,而这一切对用户是透明的,向http设计者致敬。