5. HTTPS 优化:安全与性能的平衡
5.1 CDN 上 HTTPS 很重要的原理
场景对比:
无 HTTPS:
用户访问 http://cdn.example.com/image.jpg
↓
浏览器地址栏显示"不安全"
↓
某些浏览器/APP 直接拦截访问
↓
SEO 排名降低有 HTTPS:
用户访问 https://cdn.example.com/image.jpg
↓
浏览器显示绿色锁标志
↓
HTTP/2 多路复用生效
↓
性能 + 安全双提升5.2 CDN HTTPS 配置要点
证书管理
| 方案 | 说明 | 成本 | 适用场景 |
|---|---|---|---|
| 云厂商免费证书 | 阿里云/腾讯云等提供 | 免费 | 单域名,快速上手 |
| Let's Encrypt | 社区免费证书 | 免费 | 自动化部署 |
| 商业 DV/OV/EV 证书 | 赛门铁克、GeoTrust 等 | ¥几百-几万/年 | 企业级、需要绿条 |
| 泛域名证书 | *.example.com | ¥几千/年 | 多子域名 |
实战建议:
- 测试环境:Let's Encrypt 或云厂商免费证书
- 生产环境:泛域名证书(省事)或单域名 OV 证书(省钱)
- 注意证书过期时间,设置自动续期提醒
HTTPS 优化配置
TLS 版本选择:
推荐配置:仅 TLS 1.2 和 TLS 1.3
兼容配置:TLS 1.1 + TLS 1.2 + TLS 1.3(兼容老旧浏览器)密码套件:
推荐:ECDHE 密钥交换 + AES-GCM 加密
禁用:DES、RC4、MD5、SHA1OCSP Stapling:
功能:CDN 节点预获取证书吊销状态
效果:减少客户端验证时间 200-500ms
建议:务必开启TLS 会话复用:
Session ID 复用:客户端带着上次 Session ID,服务端恢复会话
Session Ticket 复用:服务端把会话状态加密发给客户端,下次带来
效果:避免完整 TLS 握手,减少 1-RTT5.3 HTTP/2 与 HTTP/3 在 CDN 上的应用
HTTP/2 多路复用:
HTTP/1.1:
请求 1 (index.html) ────────────────→
响应 1 ←──────────────────────────────
请求 2 (style.css) ─────────────────→
响应 2 ←──────────────────────────────
请求 3 (script.js) ─────────────────→
响应 3 ←──────────────────────────────
(串行,一个完了下一个)
HTTP/2:
请求 1 ──→
请求 2 ──→ 合并在一个 TCP 连接上,帧交错传输
请求 3 ──→
响应 1 ←── 按优先级流式返回
响应 2 ←──
响应 3 ←──
(并行,一个连接多路复用)HTTP/2 服务端推送:
场景:用户请求 index.html,里面引用了 style.css 和 script.js
传统方式:
1. 用户下载 index.html
2. 解析发现需要 style.css 和 script.js
3. 再发两个请求获取
HTTP/2 推送:
1. 用户请求 index.html
2. CDN 节点返回 index.html 的同时,主动推送 style.css 和 script.js
3. 用户解析 html 时,资源已经在缓存里了
注意:推送要谨慎,推多了浪费带宽,推少了没效果HTTP/3 (QUIC):
HTTP/2 的问题:基于 TCP,队头阻塞
→ 一个 TCP 包丢失,整个连接等待重传
HTTP/3 的解决:基于 QUIC(UDP 之上实现可靠传输)
→ 每个流独立,一个流阻塞不影响其他流
→ 连接迁移:WiFi 切 4G,连接不中断
→ 0-RTT 握手:第一次访问也能快速建立连接
现状:2024 年主流 CDN 已支持 HTTP/3,建议开启