SSL/TLS性能优化
SSL/TLS 握手涉及多次往返和计算密集的密钥交换。优化握手性能可显著降低延迟和 CPU 消耗。
会话复用
会话缓存
nginx
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
}
shared:SSL:10m— 跨 worker 共享 10MB 会话缓存(约 40000 个会话)ssl_session_timeout— 会话有效期,建议 10 分钟到 1 天
会话缓存可复用已建立的连接参数,跳过完整握手。10MB 共享缓存比
builtin更高效。
会话票据 (TLS Session Tickets)
nginx
server {
# NGINX 1.23.2+ 推荐关闭
ssl_session_tickets off;
}
TLS Session Tickets 允许服务器在无状态情况下复用会话。但早期实现缺乏前向安全性,新版本建议关闭,使用 OCSP Stapling 替代。
OCSP Stapling
启用 OCSP 装订
nginx
server {
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
}
- OCSP Stapling 由服务器预先获取证书状态并附加到握手
- 避免客户端额外请求 CA 查询
- 减少约 200-500ms 延迟
加密套件优化
优先选择 ECDHE
nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ECDHE 比 RSA 密钥交换快 3-10 倍,且提供前向安全。GCM 模式比 CBC 快且更安全。
TLS 1.3 简化套件
nginx
# TLS 1.3 的套件由协议自身管理,ssl_ciphers 不影响 1.3
ssl_protocols TLSv1.2 TLSv1.3;
TLS 1.3 移除了不安全的算法,握手仅需 1-RTT(0-RTT 需额外配置)。启用 1.3 是最有效的性能优化。
硬件加速
OpenSSL 引擎
Bash
# 查看 OpenSSL 支持的引擎
openssl engine -t
# NGINX 自动使用可用的 OpenSSL 引擎
# 如 AES-NI 指令集加速
现代 CPU 的 AES-NI 指令集可加速 AES 加密 3-10 倍。确保 BIOS 中启用 AES-NI 且 OpenSSL 版本支持。
0-RTT 早期数据
TLS 1.3 0-RTT
nginx
server {
# 需要 NGINX 1.25.1+ 配合 OpenSSL 3.0+
ssl_early_data on;
}
0-RTT 允许客户端在第一个握手消息中就携带数据。但有重放攻击风险,仅适用于幂等请求(GET/HEAD)。
证书链优化
减小证书体积
nginx
server {
ssl_certificate /etc/nginx/ssl/fullchain.pem; # 包含中间证书
ssl_certificate_key /etc/nginx/ssl/server.key;
}
- 使用 ECDSA 证书比 RSA 更小更快(256 位 ECDSA ≈ 3072 位 RSA 安全级别)
- 中间证书放在同一文件减少一次传输
- 使用短域名证书链(Let's Encrypt R3 → ISRG Root X1)
要点总结
- 使用
shared类型ssl_session_cache跨 worker 复用会话 - OCSP Stapling 减少客户端证书验证延迟
- 优先 ECDHE + GCM 加密套件,比 RSA 快 3-10 倍
- 启用 TLS 1.3 获得最优握手性能
- 利用 CPU AES-NI 指令集加速加密运算
- 0-RTT 需权衡性能和安全(重放攻击风险)
- ECDSA 证书比 RSA 更小更快
📝 发现内容有误?点击此处直接编辑