nginx tls配置需协同优化协议版本、加密套件、会话复用、ocsp stapling及http/2参数:仅启用tls 1.2/1.3,优先tls 1.3套件;启用共享会话缓存与session tickets;配置ocsp stapling并使用完整证书链;显式启用http/2并调优头部压缩与并发流。

Nginx 的 TLS 配置不是“开个 HTTPS 就完事”,真正影响安全水位和首屏加载速度的,是那些细粒度参数的协同取舍。核心思路很明确:在兼容主流客户端的前提下,用最简协议路径、最强加密组合、最少握手开销完成可信连接。下面从四个关键维度展开,每项都附带可直接落地的配置逻辑和取舍依据。
精准启用 TLS 协议版本与加密套件
只允许 TLS 1.2 和 TLS 1.3,彻底禁用 TLS 1.0/1.1(已知存在 POODLE、BEAST 等漏洞)。TLS 1.3 不仅移除不安全算法(如 RC4、SHA-1、RSA 密钥交换),还实现 1-RTT 握手甚至 0-RTT 恢复,大幅降低延迟。
加密套件需按优先级排序,把 TLS 1.3 套件前置,再接前向保密强、AEAD 安全的 TLS 1.2 套件:
- 优先使用
TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256(移动弱网友好) - 兼容性兜底保留
ECDHE-RSA-AES128-GCM-SHA256(覆盖旧版 Android/iOS) - 明确排除
aNULL、eNULL、MD5、SHA1、DES、RC4等已淘汰算法 - 设置
ssl_prefer_server_ciphers on,确保服务端策略生效
会话复用机制双轨并行
避免每次握手都做完整密钥协商,用两种互补方式提升复用率:
-
Session Cache:启用共享内存缓存(如
shared:SSL:50m),设合理超时(ssl_session_timeout 4h),适合同集群内多 worker 复用 -
Session Tickets:开启
ssl_session_tickets on并指定密钥文件(ssl_session_ticket_key /etc/nginx/ticket.key),支持跨进程/跨机器复用,但需定期轮换 ticket key 防泄露
二者不互斥,建议同时启用。注意:TLS 1.3 默认使用 tickets,无需额外配置;TLS 1.2 下两者共存效果更稳。
OCSP Stapling 与证书链精简
客户端验证证书有效性时,若直连 CA 的 OCSP 服务器,可能因网络阻塞拖慢 TLS 握手。启用 Stapling 后,Nginx 主动获取并缓存 OCSP 响应,在握手时一并下发:
-
ssl_stapling on -
ssl_stapling_verify on(需配置可信 CA 证书用于验签) -
resolver 8.8.8.8 1.1.1.1 valid=300s(DNS 解析器,超时设短防卡死)
同时确保ssl_certificate指向的是包含完整证书链的fullchain.pem(即域名证书 + 中间 CA),而非仅域名证书 —— 否则客户端可能因缺中间证书而反复尝试下载,引发握手失败或降级。
HTTP/2 与 TLS 层协同调优
HTTP/2 必须运行在加密通道上,且对 TLS 层有隐含要求:
-
listen 443 ssl http2必须显式声明,不能只写ssl - 启用头部压缩:
http2_max_field_size 16k(防大 Cookie/Headers 拒绝) - 控制并发流数:
http2_max_concurrent_streams 128(平衡资源占用与吞吐) - 关闭 TLS 重协商(默认禁用,但确认
ssl_renegotiation off更稳妥) - 若用 ECC 证书,确保
ssl_ecdh_curve secp384r1(比默认 curve 更快更安全)
这些参数不是孤立生效的,比如 ssl_ciphers 过严会导致老设备握手失败,ssl_session_cache 太小会频繁失效,resolver DNS 不可用会让 OCSP stapling 归零。上线前务必用 SSL Labs Test 验证评级(目标 A+),并用 curl + openssl 命令实测不同客户端行为(如 curl -vI --tlsv1.2 https://site / --tlsv1.3)。











