1. HTTPS 协议基础:HTTP 与 HTTPS 的区别、SSL/TLS 协议栈、加密算法概述

各位好,我是老周。做网络分析这些年,我见过太多人一抓包看到加密流量就懵了。其实 HTTPS 没那么神秘,说白了就是在 HTTP 外面套了一层安全壳。今天咱们先把基础打牢,后面才能用 Wireshark 把加密过程一层层剥开来看。

1.1 HTTP 与 HTTPS 的区别

HTTP 是明文传输的,你发什么,中间设备就能看到什么。我早年做项目时,客户的内网抓包直接能看到员工登录密码,那叫一个尴尬。HTTPS 就是在 HTTP 和 TCP 之间加了一层 SSL/TLS 协议,把数据加密后再传输。

对比项 HTTP HTTPS
默认端口 80 443
URL 前缀 http:// https://
数据传输 明文 加密
身份验证 无 证书验证
数据完整性 无校验 MAC 校验
性能开销 低 高(握手阶段)

核心区别一句话:HTTP 是裸奔,HTTPS 是穿了防弹衣。Wireshark 里看 HTTP 直接能看到请求头和响应体,HTTPS 只能看到加密后的乱码——除非你把私钥导进去。

1.2 SSL/TLS 协议栈

SSL 最早是 Netscape 搞的,后来 IETF 接手改名叫 TLS。现在市面上说的 SSL/TLS,其实指的都是 TLS。目前主流是 TLS 1.2 和 TLS 1.3,SSL 3.0 和 TLS 1.0 早就被淘汰了。

协议栈长什么样?我画个图你就明白了。

SSL/TLS 协议栈结构 应用层(HTTP / FTP / SMTP) TLS 握手协议 TLS 记录协议 TLS 层(加密 / 解密 / 完整性校验) 传输层(TCP) TLS 握手协议负责协商密钥,记录协议负责加密传输

从上往下看:应用层数据先交给 TLS 层,TLS 握手协议负责协商加密参数和密钥,然后记录协议把数据分块、压缩、加 MAC、加密,最后交给 TCP 发出去。接收端反过来操作。

我的经验:在 Wireshark 里过滤 TLS 握手包,用 tls.handshake.type 这个字段。比如 tls.handshake.type == 1 就是 Client Hello,tls.handshake.type == 2 是 Server Hello。我排查 HTTPS 连接慢的问题时,经常先看握手花了几个 RTT。

1.3 加密算法概述

加密算法分三类:对称加密、非对称加密、哈希算法。HTTPS 把这三种组合起来用,各取所长。我一个个说。

1.3.1 对称加密

加密和解密用同一个密钥。速度快,适合加密大量数据。问题是密钥怎么安全地传给对方?

算法 密钥长度 特点
AES 128 / 192 / 256 位 目前最常用,硬件加速支持好
ChaCha20 256 位 移动端性能好,TLS 1.3 标配之一
3DES 168 位 已淘汰,别用了

1.3.2 非对称加密

一对密钥:公钥加密,私钥解密。公钥可以公开,私钥自己藏好。解决了密钥分发问题,但速度慢,不适合加密大量数据。

算法 用途 现状
RSA 密钥交换 / 数字签名 逐渐被 ECDHE 取代
ECDHE 密钥交换(前向安全) TLS 1.3 首选
Ed25519 数字签名 新兴,性能极好

避坑指南:我曾经遇到一个客户,HTTPS 连接建立特别慢,抓包一看还在用 RSA 密钥交换。RSA 没有前向安全性,而且握手时要做大数运算,延迟高。后来建议他们升级到 ECDHE,握手时间直接砍半。记住:生产环境优先选 ECDHE + AES-GCM。

1.3.3 哈希算法

哈希算法把任意长度的数据变成固定长度的摘要。不可逆,用来校验数据完整性。HTTPS 里用哈希算法计算消息认证码(MAC),防止数据被篡改。

算法 输出长度 安全性
SHA-256 256 位 安全,TLS 1.2/1.3 标配
SHA-384 384 位 更安全,用于高安全场景
MD5 / SHA-1 128 / 160 位 已破解,禁止使用

1.4 三种算法如何配合?

HTTPS 的加密流程,说白了就是一套组合拳:

  1. 非对称加密 用来安全地协商出对称密钥(通过密钥交换算法)。
  2. 对称加密 用协商好的密钥加密实际传输的数据。
  3. 哈希算法 给每条消息加上 MAC,确保没人篡改过。

你想想看,如果只用对称加密,密钥怎么安全地传给对方?如果只用非对称加密,加密几 KB 数据就要算半天,网页根本打不开。所以 HTTPS 把两者结合起来:非对称加密负责安全地传递对称密钥,对称加密负责高效地加密数据,哈希算法保证数据没被动手脚。

一句话总结:非对称加密解决密钥分发问题,对称加密解决性能问题,哈希算法解决完整性问题。三者缺一不可。