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 自动签发证书:

二、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+