推荐答案
使用最新的 TLS 版本
确保使用 TLS 1.2 或更高版本,禁用不安全的 SSL 版本(如 SSLv2 和 SSLv3)。ssl_protocols TLSv1.2 TLSv1.3;
选择强加密套件
配置安全的加密套件,优先使用 ECDHE 和 AES-GCM 算法。ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; ssl_prefer_server_ciphers on;
启用 OCSP Stapling
减少客户端验证证书的时间,提升性能。ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s;
配置 HSTS
强制客户端使用 HTTPS,防止降级攻击。add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
优化 SSL 会话缓存
减少 SSL 握手开销,提升性能。ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
使用更短的密钥交换参数
减少 DH 参数长度,提升性能。ssl_dhparam /etc/nginx/dhparam.pem;
启用 HTTP/2
提升性能并支持多路复用。listen 443 ssl http2;
定期更新证书
确保证书不过期,避免服务中断。
本题详细解读
1. 使用最新的 TLS 版本
TLS 1.2 和 TLS 1.3 提供了更强的安全性和性能优化。禁用旧版本的 SSL(如 SSLv2 和 SSLv3)可以避免已知的安全漏洞。
2. 选择强加密套件
加密套件决定了 SSL/TLS 连接的安全性。优先使用 ECDHE(椭圆曲线迪菲-赫尔曼)和 AES-GCM(高级加密标准 - Galois/Counter Mode)算法,因为它们提供了前向保密性和高效性能。
3. 启用 OCSP Stapling
OCSP Stapling 可以减少客户端验证证书的时间,避免客户端直接向证书颁发机构(CA)请求证书状态,从而提升性能并减少延迟。
4. 配置 HSTS
HTTP Strict Transport Security (HSTS) 强制客户端使用 HTTPS,防止中间人攻击和协议降级攻击。max-age
参数定义了 HSTS 策略的有效期,includeSubDomains
确保所有子域名也强制使用 HTTPS。
5. 优化 SSL 会话缓存
SSL 会话缓存可以减少 SSL 握手的开销,提升性能。shared:SSL:10m
表示共享缓存大小为 10MB,ssl_session_timeout
定义了会话的超时时间。
6. 使用更短的密钥交换参数
Diffie-Hellman (DH) 参数用于密钥交换。使用更短的 DH 参数可以减少计算开销,但需要确保参数长度足够安全(通常为 2048 位)。
7. 启用 HTTP/2
HTTP/2 支持多路复用、头部压缩和服务器推送,可以显著提升性能。在 Nginx 中启用 HTTP/2 只需在 listen
指令中添加 http2
。
8. 定期更新证书
SSL/TLS 证书通常有有效期限制,定期更新证书可以避免因证书过期导致的服务中断。可以使用自动化工具(如 Certbot)来管理证书的续期。
通过以上优化措施,可以显著提升 Nginx 的 SSL/TLS 配置的安全性和性能。