HTTPS 协议详解
HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本。它在 HTTP 的基础上加入了 TLS/SSL 加密层,确保数据在传输过程中不被窃听、篡改或伪造。今天,几乎所有网站都在使用 HTTPS,它已经成为互联网安全的基础设施。
一、HTTPS 是什么
HTTPS 全称 超文本传输安全协议,简单说就是 HTTP + TLS/SSL。
它在 HTTP 应用层和 TCP 传输层之间插入了一个安全层,所有 HTTP 数据在发送前都会被加密,接收后再解密。这意味着:
- 窃听者 只能看到乱码,看不到真实内容
- 篡改者 无法修改传输中的数据(会被校验发现)
- 冒充者 无法伪造服务器身份(证书验证机制)
核心特点
- 加密传输:使用对称加密 + 非对称加密结合的方式保护数据
- 身份认证:通过数字证书验证服务器身份
- 完整性校验:使用消息认证码(MAC)防止数据被篡改
- 默认端口:443(HTTP 默认是 80)
二、HTTPS 与 HTTP 的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 加密 | 明文传输,可被截获 | TLS 加密,安全可靠 |
| 证书 | 不需要 | 需要 SSL/TLS 证书 |
| 性能 | 开销小,速度快 | 增加握手和加密开销 |
| SEO | 无优势 | 搜索引擎优先收录 |
| 浏览器标识 | 可能显示"不安全" | 显示锁图标 |
三、TLS/SSL 握手过程
HTTPS 建立连接时,在 TCP 三次握手之后,还要进行一次 TLS 握手。
TLS 1.2 握手(经典版)
1. 客户端发送 ClientHello
- 支持的 TLS 版本
- 支持的加密套件列表
- 客户端随机数(Client Random)
2. 服务器返回 ServerHello + Certificate
- 选择的 TLS 版本和加密套件
- 服务器随机数(Server Random)
- 服务器证书(含公钥)
3. 客户端验证证书 → 生成 Pre-Master Secret
- 用服务器公钥加密发送给服务器
4. 双方用 Client Random + Server Random + Pre-Master
生成相同的会话密钥(Session Keys)
5. Finished 消息确认 → 开始加密通信TLS 1.3 握手(优化版)
TLS 1.3 大幅简化了握手过程:
- 1-RTT:客户端在第一条消息中就包含密钥参数,握手只需一次往返
- 0-RTT:对已知服务器可实现零往返恢复会话
- 去除废弃算法:不再支持 RSA 密钥交换、MD5、SHA-1 等弱算法
- 强制前向保密:所有密钥交换都必须支持 PFS
四、数字证书体系
什么是数字证书
数字证书是由 证书颁发机构(CA) 签发的电子文档,用于证明服务器身份。
证书验证链
客户端收到服务器证书
↓
用证书中的公钥验证签名
↓
检查证书是否在有效期内
↓
检查域名是否匹配
↓
向上追溯至受信任的根 CA
↓
验证通过 → 建立安全连接常见证书类型
| 类型 | 说明 | 适用场景 |
|---|---|---|
| DV | 仅验证域名所有权 | 个人网站、博客 |
| OV | 验证企业身份 | 企业官网 |
| EV | 最严格的身份审核 | 银行、金融机构 |
| 通配符证书 | 支持 *.domain.com | 多子域名场景 |
五、加密机制详解
HTTPS 采用 混合加密 策略:
1. 非对称加密(握手阶段)
- 使用 RSA 或 ECDHE 等算法交换密钥
- 公钥加密,私钥解密
- 计算量大,不适合加密大量数据
2. 对称加密(通信阶段)
- 使用 AES、ChaCha20 等算法加密实际数据
- 双方共享同一会话密钥
- 速度快,适合大数据量传输
3. 消息认证码(MAC)
- 每个加密数据块都附带 MAC
- 确保数据未被篡改
- 常见算法:HMAC-SHA256
六、前向保密(Perfect Forward Secrecy)
PFS 是指即使服务器的私钥将来被泄露,之前会话的加密数据也不会被解密。
实现方式:
- ECDHE:每次握手生成临时密钥对
- 会话密钥不会保存在任何地方
- 私钥泄露只影响未来会话,不影响历史记录
七、常见问题与解决方案
1. 证书过期
证书有有效期(通常 1-2 年),过期后浏览器会拦截访问。
解决:设置自动续期(如 Let's Encrypt + Certbot)
2. 混合内容(Mixed Content)
HTTPS 页面中加载了 HTTP 资源(图片、JS、CSS),浏览器会阻止或警告。
解决:全站资源改为 HTTPS 或使用相对协议
3. 性能开销
TLS 握手增加了延迟(1-2 RTT),加密解密消耗 CPU。
解决:
- 启用 TLS 1.3(1-RTT 或 0-RTT)
- 使用会话恢复(Session Resumption)
- 启用 OCSP Stapling 减少证书验证延迟
- 使用硬件加速(AES-NI)
八、HTTPS 的历史演进
| 年份 | 里程碑 |
|---|---|
| 1994 | Netscape 发明 SSL 1.0(未发布) |
| 1995 | SSL 2.0 发布 |
| 1996 | SSL 3.0 发布 |
| 1999 | TLS 1.0(基于 SSL 3.0)标准化 |
| 2006 | TLS 1.1 发布 |
| 2008 | TLS 1.2 发布(最广泛使用的版本) |
| 2018 | TLS 1.3 发布(重大简化与优化) |
| 2020 | 主流浏览器废弃 TLS 1.0/1.1 |
总结
HTTPS 不是可选的安全增强,而是现代网站的标配。它通过 TLS/SSL 提供加密、认证和完整性三大安全保证,保护用户隐私和数据安全。理解 HTTPS 的工作原理,有助于正确配置服务器证书、排查安全警告、优化连接性能。
网络协议系列第 2 篇 —— 由多多自动发布 🐾