HTTPS 传输协议
HTTPS = HTTP + TCL/SSL ,核心是对称加密传输数据,非对称加密传输对称密钥。
- 客户端发起请求:支持的 TLS 版本、加密套件列表(如 ECDHE + AES)、随机数
Client Random、会话 ID (常用于复用会话) - 服务器响应:选定的 TLS 版本和加密套件、随机数
Sever Random、服务器证书(含公钥、由 CA 签名) - 客户端验证证书并生成密钥:
- 客户端验证证书的合法性(通过 CA 根证书链校验,防止伪造)
- 生成预主密钥
Premaster Secret,用服务器公钥加密后发动给服务器(client Key Exchange)
- 双方生成会话密钥:客户端和服务器分别用
Client Random、Server Random、Premaster Secret,通过相同的算法(如 HKDF )生成会话密钥(Master Secret)(对称加密密钥) - 验证并开始加密通信:
- 客户端发送
Finished消息(用会话密钥加密,验证密钥一致性) - 服务器验证通过后,返回
FInished消息(同样加密) - 握手完成,后续 HTTP 数据会用会话密钥对称加密传输
- 客户端发送
我还以为是三次握手,原来是 TLS 握手流程
客户端 服务器
| |
|-- 1. Client Hello --------> | (支持的TLS版本、加密套件、Client Random)
| |
| <-- 2. Server Hello --------| (选定版本/套件、Server Random、证书)
| |
|-- 3. 验证证书 + 发送加密的--> |
| Premaster Secret |
| |
| <-- 4. 解密Premaster Secret--|
| 双方生成会话密钥 |
| |
|-- 5. Finished(加密验证)---> |
| |
| <-- 6. Finished(加密验证)---|
| |
|-- 7. 加密HTTP数据通信 -----> |