
1. HTTP 与 HTTPS 的关系
- HTTP:明文传输,数据可能被中间人窃听或篡改。
- HTTPS :HTTP + TLS/SSL
- TLS/SSL 负责加密传输、身份认证和数据完整性。
- HTTPS 在 TCP 连接上建立 TLS/SSL 会话后,所有 HTTP 请求和响应都通过加密通道传输。
HTTP 和 HTTPS 是应用层协议,TCP 是传输层协议。HTTP 基于 TCP 连接,而 HTTPS 在 HTTP 与 TCP 之间加了 SSL/TLS 加密。
换句话说:
浏览器 ↔ TCP ↔ 服务器
│
TLS/SSL 加密层
│
HTTP 请求/响应内容
SSL/TLS 加密结合了对称加密和非对称加密:
- 通过握手交换服务器证书和公钥(非对称加密)。
- 基于客户端和服务器的随机数生成对称会话密钥 X。
- 用服务器公钥加密该会话密钥,安全传输。
- 最终用会话密钥 X 对 HTTP 数据进行加密传输。
2. TLS/SSL 四次握手流程
假设客户端为浏览器,服务器为网站:
第一次握手:客户端 Hello
-
客户端发送:
- 支持的 TLS 版本
- 支持的加密算法列表(Cipher Suites)
- 一个随机数
ClientRandom(生成主密钥用)
-
目的:告知服务器能力,并提供随机数用于密钥生成。
Client → Server: ClientHello(TLS版本, Cipher Suites, ClientRandom)
第二次握手:服务器 Hello + 证书
-
服务器响应:
- TLS 版本确认
- 选定加密算法
- 服务器随机数
ServerRandom - 服务器证书(含公钥)
-
浏览器验证证书合法性(CA 签名、域名匹配、有效期等)
-
目的:身份认证并提供随机数参与密钥生成。
Server → Client: ServerHello(TLS版本, Cipher Suite, ServerRandom) + Certificate
第三次握手:密钥交换
-
客户端生成 预主密钥(Pre-Master Key)
-
用服务器公钥加密后发送
-
双方使用公式生成主密钥:
Master Key = f(Pre-Master Key, ClientRandom, ServerRandom)
-
主密钥再派生出:
-
对称加密密钥 X(Session Key):加密 HTTP 数据
-
消息认证码(MAC)密钥:保证数据完整性
Client → Server: EncryptedPreMasterKey
Server → (内部解密): Pre-Master Key → Master Key → Session Key X
-
第四次握手:确认加密通道
-
客户端与服务器互发"Finished"消息:
- 用对称密钥 X 加密
- 验证握手过程完整性
-
握手完成后,双方用会话密钥 X 加密 HTTP 数据传输。
Client → Server: Finished (用X加密)
Server → Client: Finished (用X加密)
3. 会话建立后的通信(HTTPS 数据传输)
-
会话密钥 X 用于加密 HTTP 请求和响应
-
浏览器发送:
Encrypt(X, GET /index.html HTTP/1.1)
-
服务器解密处理请求,返回:
Encrypt(X, HTTP/1.1 200 OK ...)
-
所有 HTTP 数据均在 TLS/SSL 加密层传输,外部无法窃听或篡改。
4. 总结流程图(文字版)
HTTP请求(明文)
│
TLS/SSL 加密通道建立(四次握手):
1️⃣ ClientHello (ClientRandom)
2️⃣ ServerHello + Certificate (ServerRandom)
3️⃣ EncryptedPreMasterKey → Master Key → Session Key X
4️⃣ Finished (加密验证)
│
HTTP请求/响应(加密) → 用 X 加密
✅ 重点回顾
- HTTPS = HTTP + TLS/SSL
- TLS/SSL 四次握手:
- ClientHello
- ServerHello + 证书
- 交换预主密钥 → 生成主密钥 → 衍生会话密钥 X
- 双方确认 Finished
- 会话密钥 X 用于加密所有 HTTP 数据,保证机密性和完整性