上一篇
https通信过程数据包
- 行业动态
- 2025-05-01
- 3256
HTTPS通信通过TLS握手协商密钥,数据包含加密载荷及TCP/IP头,确保传输安全
HTTPS通信过程数据包解析
TCP三次握手(建立传输通道)
阶段 | 协议层 | 数据包类型 | 内容示例 | 说明 |
---|---|---|---|---|
第1次握手 | TCP | SYN包 | 源端口: 随机(如50000) 目标端口: 443 序列号: 0 | 客户端发起连接请求,携带初始序列号,请求建立TCP连接。 |
第2次握手 | TCP | SYN+ACK包 | 源端口: 443 目标端口: 50000 序列号: 0 确认号: 客户端序列号+1 | 服务器响应客户端,确认客户端序列号,并携带自己的初始序列号。 |
第3次握手 | TCP | ACK包 | 源端口: 50000 目标端口: 443 确认号: 服务器序列号+1 | 客户端确认服务器序列号,完成双向连接建立。 |
SSL/TLS握手(建立安全通道)
阶段 | 协议层 | 数据包类型 | 内容示例 | 说明 |
---|---|---|---|---|
ClientHello | TLS | Handshake协议包 | 支持的TLS版本(如TLS 1.2/1.3) 支持的加密算法列表 随机数(Client Random) | 客户端发起握手,告知服务器支持的协议和加密套件。 |
ServerHello | TLS | Handshake协议包 | 选定的TLS版本 选定的加密算法(如ECDHE-RSA) 服务器随机数(Server Random) | 服务器响应,确认协议参数并生成会话ID。 |
服务器证书传输 | TLS | Handshake协议包 | (包含公钥、证书链、签名) | 服务器发送数字证书,用于客户端验证身份和获取公钥。 |
密钥交换 | TLS | Handshake协议包 | 临时公钥(用于ECDHE) 加密材料(如签名) | 服务器生成临时公钥,客户端用其计算共享密钥。 |
客户端密钥交换 | TLS | Handshake协议包 | 预主密钥(Pre-Master Secret) 加密签名(用服务器公钥加密) | 客户端生成预主密钥,通过服务器公钥加密后发送。 |
完成握手 | TLS | Finished包 | 校验值(基于握手内容计算的MAC) | 双方确认握手成功,生成会话密钥(对称密钥)。 |
应用层数据传输
阶段 | 协议层 | 数据包类型 | 内容示例 | 说明 |
---|---|---|---|---|
客户端请求 | HTTPS | HTTP请求包 | GET /index.html HTTP/1.1 Host: example.com 加密数据块 | 客户端发送加密的HTTP请求,数据经会话密钥(如AES)加密。 |
服务器响应 | HTTPS | HTTP响应包 | HTTP/1.1 200 OK 加密数据块(HTML内容) | 服务器返回加密的HTTP响应,数据同样用会话密钥加密。 |
TCP连接关闭
阶段 | 协议层 | 数据包类型 | 内容示例 | 说明 |
---|---|---|---|---|
客户端FIN包 | TCP | FIN+ACK包 | 序列号: 当前传输序列号 FIN标志: 1 | 客户端主动关闭连接,发送FIN报文。 |
服务器FIN+ACK包 | TCP | FIN+ACK包 | 确认号: 客户端FIN序列号+1 FIN标志: 1 | 服务器确认关闭请求,并发送自身FIN报文。 |
客户端ACK包 | TCP | ACK包 | 确认号: 服务器FIN序列号+1 | 客户端确认服务器关闭请求,连接正式终止。 |
相关问题与解答
问题1:HTTPS和HTTP的主要区别是什么?
解答:
- 传输安全:HTTPS通过TLS/SSL对数据加密,防止中间人窃听;HTTP是明文传输。
- 端口号:HTTPS默认使用443端口,HTTP使用80端口。
- 证书验证:HTTPS需要服务器提供有效数字证书,客户端验证其合法性;HTTP无此步骤。
- 性能开销:HTTPS因加密/解密操作会增加CPU消耗,但现代硬件已能高效处理。
问题2:为什么TLS握手需要两次随机数(Client Random和Server Random)?
解答:
- 防止重放攻击:两次随机数结合其他参数(如时间戳)生成唯一的会话密钥,确保每次通信的密钥不同。
- 增强安全性:随机数参与密钥计算,增加攻击者猜测或破解密钥的难度。
- 兼容性:部分算法(如DH密钥交换)依赖双方