HTTPS 详细工作流程 深入解析为什么HTTPS是安全的
一、HTTPS整体流程
HTTPS 的工作流程可分为 TCP连接建立 → TLS握手协商 → 安全数据传输 三个阶段:
[客户端] [服务器]
│ │
├── 1. TCP三次握手 → (建立网络连接)
│ │
├── 2. TLS握手(4阶段) → (协商加密参数、验证身份)
│ │
└── 3. 加密通信 → (传输应用数据)
二、详细步骤说明
1. TCP三次握手(底层网络连接)
- 目的:确保客户端和服务器之间网络可达。
- 流程:
- 客户端发送
SYN
包(请求连接)。 - 服务器回复
SYN-ACK
包(确认请求并同步序列号)。 - 客户端发送
ACK
包(确认握手完成)。
- 客户端发送
- 结果:双方建立可靠的 TCP 连接。
2. TLS握手(加密协商)
TLS 握手是 HTTPS 的核心,分为以下 4个阶段:
阶段1:ClientHello
- 客户端发起请求:
- 支持的 TLS 版本(如 TLS 1.2/1.3)。
- 支持的密码套件(如
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
)。 - 客户端生成的随机数(Client Random)。
- 作用:告知服务器自身的安全能力。
[客户端] → {ClientHello} [服务器]
包含:TLS版本、密码套件、Client Random
阶段2:ServerHello
- 服务器响应:
- 选中的 TLS 版本和密码套件(从客户端提供的列表中选取)。
- 服务器证书(包含公钥和域名信息)。
- 服务器生成的随机数(Server Random)。
- 作用:确认加密方式,证明服务器身份。
[服务器] → {ServerHello, Certificate} [客户端]
包含:TLS版本、密码套件、Server Random、证书
阶段3:证书验证与密钥协商
-
客户端验证证书:
- 检查证书是否由可信 CA 签发。
- 域名是否匹配(如证书域名是
google.com
,则客户端访问的 URL 必须是google.com
)。 - 证书是否过期。
-
密钥生成:
- 客户端生成 预主密钥(Pre-Master Secret),并通过服务器公钥加密后发送。
- 密钥交换算法:
- RSA:直接用服务器公钥加密 Pre-Master Secret。
- ECDHE:通过椭圆曲线临时密钥交换,更安全(防长期泄露风险)。
-
示例(ECDHE):
[客户端] → {Encrypted Pre-Master Secret} [服务器] (使用服务器公钥加密)
阶段4:生成会话密钥
- 双方根据以下数据生成对称密钥:
- 生成的密钥类型:
- 对称加密密钥(如 AES-256,用于加密数据)。
- MAC 密钥(如 HMAC-SHA256,用于数据完整性校验)。
- 初始化向量(IV)(用于防止重放攻击)。
- 密钥分发:
- 所有密钥通过协商的密码套件加密后传输。
[客户端] → {ChangeCipherSpec} [服务器]
表示后续通信将加密
[服务器] → {ChangeCipherSpec} [客户端]
[客户端] → {ServerFinished} [服务器]
[服务器] → {ClientFinished} [客户端]
3. 安全数据传输
- 数据加密:
- 使用对称密钥(如 AES)加密 HTTP 数据。
- 每个数据块附加 MAC(消息认证码),验证数据完整性。
- 心跳机制:
- 定时发送空数据包,检测连接是否存活,防止中间人攻击。
[客户端] → {Encrypted Data + MAC} [服务器]
[服务器] → {Encrypted Data + MAC} [客户端]
三、完整流程图(文字版)
┌───────────────┐ ┌───────────────┐
│ 客户端 │ │ 服务器 │
└───────┬───────┘ └───────┬───────┘
├──────────────────────┼──────────────────────┤
│ 1. TCP三次握手 │ │
│ (建立网络连接) │ │
└──────────────────────┼──────────────────────┘
├──────────────────────┼──────────────────────┤
│ 2. TLS握手 │ │
│ ├── ClientHello │ │
│ ├── ServerHello + │ │
│ │ 证书 │ │
│ ├── 密钥协商(ECDHE/RSA)│ │
│ └── 生成会话密钥 │ │
└──────────────────────┼──────────────────────┘
├──────────────────────┼──────────────────────┤
│ 3. 加密通信 │ │
│ ├── 数据加密(AES) │ │
│ └── MAC校验 │ │
└──────────────────────┼──────────────────────┘
└───────────────┴───────┘ ┌───────────────┴───────┘
四、为什么HTTPS是安全的
4.1、核心保障机制
1. 证书与公钥的信任体系
-
证书签名:
服务器的公钥绑定在 SSL/TLS 证书中,证书由权威 CA(证书颁发机构) 签名。- 客户端验证证书有效性(域名匹配、未过期、CA 可信)。
- 即使公钥泄露,只要证书未被篡改且 CA 可信,客户端仍能确认公钥属于合法服务器。
-
证书吊销:
若证书私钥泄露,CA 会立即吊销证书,客户端通过 OCSP(在线证书状态协议) 或 CRL(证书撤销列表) 检查证书状态,阻止使用已吊销证书。
2. 密钥交换算法(前向保密)
-
ECDHE(椭圆曲线迪菲-赫尔曼密钥交换):
- 服务器生成临时公私钥对(临时密钥),仅用于本次握手。
- 客户端用临时公钥加密预主密钥,服务器用临时私钥解密。
- 即使长期公钥泄露,攻击者也无法通过临时公钥推导出会话密钥。
-
前向保密(Forward Secrecy):
每次会话生成独立的会话密钥,与长期密钥(证书私钥)无关。- 攻击者窃取长期私钥后,仍无法解密历史会话数据。
3. 握手过程的安全传输
-
非对称加密保护握手数据:
- 在协商对称密钥前,客户端和服务器通过非对称加密(如 RSA 或 ECDHE)传输敏感数据。
- 例如:客户端用服务器公钥加密预主密钥(Pre-Master Secret),只有服务器私钥能解密。
-
密钥协商算法:
- 客户端提供支持的密码套件(如
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
),服务器从中选择最安全的选项。 - 防止算法降级攻击:客户端优先支持 TLS 1.3,禁用弱算法(如 SSLv2/3、RC4、SHA-1)。
- 客户端提供支持的密码套件(如
4. 协议版本与随机数
-
TLS 版本协商:
- 客户端声明支持的 TLS 版本(如 1.2/1.3),服务器选择最高兼容版本。
- 防止旧版协议漏洞被利用(如 POODLE 攻击)。
- 随机数生成:
4.2、具体防御场景
1. 防止公钥泄露
-
公钥本身是公开信息(包含在证书中),无需保密。
-
风险场景 :若攻击者获取公钥,能否破解通信?
不能:因为攻击者无服务器私钥无法解密,实际加密使用的是对称密钥(由预主密钥生成),而预主密钥通过非对称加密(如 ECDHE)传输。
2. 防止算法被篡改
客户端主导协商 :客户端提供支持的密码套件列表,服务器只能从中选择。
- 例如:客户端仅支持
AES-256
,服务器无法强制使用AES-128
。 - 防御算法降级攻击(如弱化加密强度)。
3. 防止中间人攻击(MITM)
-
证书验证:客户端检查证书域名是否匹配(如
example.com
),并验证证书链至根 CA。- 若攻击者伪造证书,域名不匹配(如
example.net
),浏览器会提示「不安全」。
- 若攻击者伪造证书,域名不匹配(如
-
SNI(服务器名称指示):
- 在 TLS 握手阶段,客户端通过 SNI 字段告知服务器域名,服务器返回对应证书。
- 防止多域名服务器被攻击者定向到错误证书。
4.3、对比 HTTP 明文传输
场景 | HTTP | HTTPS |
---|---|---|
公钥传输 | 无公钥交换机制。 | 通过证书发送公钥,CA 签名确保可信。 |
算法协商 | 无安全协商,易被降级攻击。 | 客户端主导选择强安全算法。 |
数据加密 | 明文传输,易被窃听篡改。 | 对称加密(AES)保护数据。 |
身份认证 | 无证书验证,易受钓鱼攻击。 | 证书验证确保服务器身份。 |
前向保密 | 无此机制,长期私钥泄露可破解历史数据。 | 临时密钥隔离,历史数据安全。 |
4.4、安全总结
HTTPS 通过 证书信任链、前向保密的密钥交换 和 协议协商机制,确保了以下安全性:
- 服务器身份可信:证书验证防止中间人伪造服务器。
- 算法安全可控:客户端强制使用强加密算法。
- 密钥不可预测:随机数和临时密钥确保会话唯一性。
- 历史数据保护:前向保密机制隔离长期密钥与会话密钥。
即使攻击者截获了握手过程中的算法和公钥信息,也无法破解后续加密通信,因为:
- 公钥是公开的,用于加密预主密钥(需私钥解密)。
- 临时密钥与会话密钥独立于长期密钥。
- 客户端仅支持安全算法,拒绝弱算法协商。
五、总结
HTTPS 通过 TCP + TLS 构建了一个安全通道,核心是 「用非对称加密交换对称密钥」,最终实现数据的加密传输和身份认证。整个过程就像在公共电话亭里安装了一个「加密盒子」,只有通话双方能听到真实内容。
推荐阅读 《HTTP 详细工作流程》
共有 0 条评论