HTTP协议本身是明文传输的,安全性较低,因此现代互联网普遍采用 HTTPS(HTTP over TLS/SSL) 来实现加密通信。HTTPS的核心是 TLS/SSL证书体系 和 加密通信流程。
一、HTTPS 证书体系
HTTPS依赖 公钥基础设施(PKI, Public Key Infrastructure) 和 数字证书 来验证服务器身份并建立安全连接。
1. 数字证书的作用
- 身份认证 :证明服务器是合法的(如 example.com 的拥有者)。
- 密钥交换:用于协商加密通信的密钥。
- 数据完整性:防止数据被篡改。
2. 证书的组成
|----------------|------------------------------------------|
| 字段 | 说明 |
| 域名(CN/SAN) | 证书绑定的域名(如 example.com),支持多域名(SAN扩展)。 |
| 公钥 | 服务器的公钥,用于加密数据或验证签名。 |
| 颁发者(CA) | 签发证书的证书颁发机构(如 Let's Encrypt、DigiCert)。 |
| 有效期 | 证书的生效和过期时间(通常1年~2年)。 |
| 签名算法 | 用于验证证书的算法(如 SHA-256 + RSA)。 |
| 数字签名 | CA对证书的哈希值用私钥加密后的结果,用于验证证书真实性。 |
3. 证书类型
|--------------|-----------------------------------|
| 类型 | 特点 |
| DV(域名验证) | 仅验证域名所有权,适合个人网站(如 Let's Encrypt)。 |
| OV(组织验证) | 验证企业身份,适合企业网站(如银行、政府机构)。 |
| EV(扩展验证) | 严格验证企业身份,浏览器地址栏显示公司名称(已逐渐被弃用)。 |
4. 证书链(Chain of Trust)
HTTPS证书采用层级信任模型:
- 根证书(Root CA)
- 由受信任的根证书颁发机构(如 DigiCert、GlobalSign)管理。
- 预装在操作系统/浏览器中(如 Windows Trusted Root Store)。
- 中间证书(Intermediate CA)
- 由根CA签发,用于实际颁发终端证书(避免根CA私钥直接暴露)。
- 终端证书(End-Entity Certificate)
- 最终提供给网站的证书(如 example.com)。
验证流程 :
浏览器检查证书签名链是否可追溯到受信任的根CA。
二、HTTPS 加密通信流程(TLS握手)
HTTPS 的加密通信分为两大阶段:握手阶段 和数据传输阶段
1. 客户端发起请求(ClientHello)
- 浏览器访问 https://example.com,发送:
- 支持的TLS版本(如 TLS 1.3)。
- 支持的加密套件(如 AES256-GCM-SHA384)。
- 随机数(Client Random)。
2. 服务器响应(ServerHello)
- 服务器返回:
- 选择的TLS版本和加密套件。
- 随机数(Server Random)。
- 数字证书(包含公钥)。
- (可选)要求客户端证书(双向认证,罕见)。
3. 客户端验证证书
- 浏览器检查:
- 证书是否由受信任的CA签发。
- 证书是否在有效期内。
- 证书绑定的域名是否匹配当前访问的域名。
- 证书是否被吊销(通过OCSP或CRL)。
4. 密钥交换(Key Exchange)
- TLS 1.2及之前 :
客户端生成 Pre-Master Secret,用服务器公钥加密后发送。 - TLS 1.3(简化) :
直接通过 DH(Diffie-Hellman) 算法协商密钥,无需加密传输。
5. 生成会话密钥
- 客户端和服务器使用:
- Client Random + Server Random + Pre-Master Secret
- → 生成 Master Secret
- → 派生 会话密钥(Session Key)(用于对称加密通信)。
- Client Random + Server Random + Pre-Master Secret
6. 加密通信开始
- 客户端发送数据:用会话密钥加密→服务器用会话密钥解密。
- 服务器返回数据:用会话密钥加密→客户端用会话密钥解密。