HTTPS加密机制的实现原理
HTTPS 本质上是 HTTP over TLS/SSL,即在 HTTP 和 TCP 之间插入了一个加密层。其实现核心分为两大阶段:握手阶段和数据传输阶段。
一、握手阶段:如何安全地协商出密钥?
这是最关键的部分,混合使用非对称加密和对称加密。以主流的 TLS 1.3 为例:
-
客户端发起请求 (Client Hello)
- 发送支持的加密套件、TLS版本。
- 附上随机数和密钥交换算法的公钥(如 ECDHE 公钥)。
-
服务器响应 (Server Hello)
- 选定加密套件,返回自己的随机数和密钥交换公钥。
- 发送数字证书用于证明身份。
- 用私钥对握手关键信息做签名。
-
密钥协商(核心魔法)
- 双方根据公钥和私钥,各自在本地计算出相同的 预主密钥。
- 原理:以 ECDHE 为例,利用椭圆曲线上的点乘交换律,无需传输秘密即可算出同一点坐标。
- 将预主密钥与之前的两个随机数混合,生成最终的对称会话密钥。
-
验证与完成
- 客户端验证服务器证书和签名。
- 双方用会话密钥发送“Finished”消息,加密通道正式建立。
二、数据传输阶段:对称加密的高效通信
握手完成后,使用商量好的会话密钥进行通信:
- 加密:HTTP 明文用会话密钥(如 AES)加密成密文。
- 完整性校验:附上消息认证码(MAC),防止数据被篡改。
三、为什么需要这套机制?—— 三大核心问题
| 核心问题 | 解决方案 | 实现方式 |
|---|---|---|
| 防窃听 | 数据加密 | 握手用非对称加密传递密钥,通信用对称加密加密内容。 |
| 防篡改 | 完整性校验 | 通过 MAC 或 AEAD 算法验证数据完整性。 |
| 防冒充 | 身份认证 | CA 数字证书 + 数字签名,验证服务器身份。 |
四、证书可信链
客户端如何确保证书是真的?依赖信任链:
- 操作系统/浏览器内置受信任的根CA证书。
- 网站证书由中间CA签发,中间CA由根CA签发。
- 浏览器验证整条链的签名,全部通过则信任该网站。
五、TLS 1.3 的改进与性能
- 更快的握手:从 TLS 1.2 的 2-RTT 降为 1-RTT。
- 0-RTT 重连:近期访问过的网站可“零往返”直接发送数据。
- 加密更彻底:握手过程中的证书等敏感信息也加密传输。

mermaid_20260516_809a7e.png