CDN SSL/TLS 配置最佳实践:保障传输安全与性能
CDN 在承载 HTTPS 流量时,SSL/TLS 的配置直接影响安全性和性能。一个优化良好的 TLS 配置可以兼顾安全和速度。
一、证书选择与部署
1.1 证书类型选择
| 证书类型 | 适用场景 | 验证级别 | 成本 |
|---|---|---|---|
| DV(域名验证) | 个人/小型网站 | 低 | 免费-低 |
| OV(组织验证) | 企业网站 | 中 | 中 |
| EV(扩展验证) | 金融/电商 | 高 | 高 |
| 通配符证书 | 多子域名 | 按级别 | 中-高 |
1.2 CDN 上的证书管理
自动证书管理(推荐):
Cloudflare: 自动 SSL
AWS CloudFront: ACM 自动续期
Azure: App Service 托管证书
阿里云: 免费 DV 证书
手动证书管理:
1. 在 CA 购买或生成证书
2. 上传到 CDN 控制台
3. 配置证书链(完整链)
4. 设置自动续期提醒
1.3 Let's Encrypt 集成
大部分 CDN 支持 Let's Encrypt 自动签发证书:
- Cloudflare:内置免费证书
- Bunny CDN:自动 Let's Encrypt
- AWS:需 ACM 导入
二、TLS 协议版本配置
2.1 推荐配置
| 协议 | 安全性 | 性能 | 推荐 |
|---|---|---|---|
| TLS 1.3 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✓ 启用 |
| TLS 1.2 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ✓ 启用 |
| TLS 1.1 | ⭐⭐⭐ | ⭐⭐⭐ | ✗ 禁用 |
| TLS 1.0 | ⭐⭐ | ⭐⭐ | ✗ 禁用 |
| SSL 3.0 | ✗ | ⭐ | ✗ 禁用 |
2.2 TLS 1.3 优势
TLS 1.3 相比 1.2 的主要改进:
- 更快的握手:1-RTT → 0-RTT
- 更安全的密码套件:移除不安全算法
- 连接时间:减少 1-2 个网络往返
2.3 CDN 配置示例
Cloudflare: SSL/TLS → Edge Certificates → Minimum TLS Version: 1.2
CloudFront: Security Policy → TLSv1.2_2021
Nginx + CDN: ssl_protocols TLSv1.2 TLSv1.3;
三、密码套件配置
3.1 推荐密码套件
# TLS 1.3 密码套件(无需配置)
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
# TLS 1.2 密码套件(推荐)
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-CHACHA20-POLY1305
ECDHE-RSA-CHACHA20-POLY1305
3.2 不安全的密码套件(禁用)
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
所有 RC4、3DES、CBC 模式
四、性能优化
4.1 OCSP Stapling
OCSP Stapling 让 CDN 代客户端查询证书状态,减少验证延迟。
# Nginx 配置
ssl_stapling on;
ssl_stapling_verify on;
4.2 SSL Session Resumption
通过会话复用减少握手次数:
# Nginx 配置
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets on;
4.3 HSTS 配置
启用 HSTS 强制使用 HTTPS:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
五、各 CDN 配置参考
| CDN | 证书管理 | 最低 TLS | HSTS 支持 | OCSP |
|---|---|---|---|---|
| Cloudflare | 免费自动 | 可配置 | ✓ | ✓ |
| CloudFront | ACM 免费 | 可配置 | ✓ | ✓ |
| Fastly | 需上传 | 可配置 | ✓ | ✓ |
| 阿里云 CDN | 免费/上传 | 可配置 | ✓ | ✓ |
| Bunny CDN | Let's Encrypt | TLS 1.2+ | ✓ | ✓ |