Nginx中每个server块需独立配置SSL证书、私钥、TLS版本及加密套件:证书链须完整,私钥权限设为600;推荐ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers应优先PFS算法并启用ssl_prefer_server_ciphers on;辅以OCSP装订、HSTS等安全头提升安全性。

在 Nginx 中为 server 块单独配置 SSL 证书和安全协议,是实现多域名、多证书或差异化 TLS 策略的基础方式。关键在于每个 server 块需明确指定证书路径、私钥、启用的 TLS 版本及加密套件,且不能与其它 server 共用不匹配的配置。
证书与私钥必须成对且路径正确
Nginx 要求每个 HTTPS server 块通过 ssl_certificate 和 ssl_certificate_key 指向有效的 PEM 格式文件。证书文件需包含完整的证书链(域名证书 + 中间证书),否则客户端可能因链不完整而报错“NET::ERR_CERT_AUTHORITY_INVALID”。私钥必须未加密(或使用 ssl_password_file 配合加密密钥),且权限建议设为 600(仅 owner 可读)。
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;- 若使用通配符证书,确保其覆盖该
server_name(如*.example.com不匹配example.com,需额外添加主域名证书或使用 SAN 证书)
强制启用现代 TLS 协议并禁用不安全版本
通过 ssl_protocols 明确限定支持的协议版本。当前推荐仅启用 TLSv1.2 和 TLSv1.3,彻底关闭已废弃的 SSLv3、TLSv1.0 和 TLSv1.1:
ssl_protocols TLSv1.2 TLSv1.3;- 注意:Nginx 1.13.0+ 原生支持 TLSv1.3,但需 OpenSSL 1.1.1+ 编译;旧版本即使配置了也会忽略
- 避免写成
TLSv1 TLSv1.1 TLSv1.2这类宽泛写法,易误启不安全协议
选用强加密套件并优先协商前向保密算法
ssl_ciphers 应排除弱算法(如 RC4、DES、3DES、MD5、SHA1),优先保障前向保密(PFS)。推荐使用 Mozilla 的 Modern 或 Intermediate 配置(根据兼容性取舍):
- Modern(仅支持较新客户端):
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; - Intermediate(平衡安全与兼容):
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305; - 务必加上
ssl_prefer_server_ciphers on;,确保服务端 cipher 顺序生效
补充关键安全头与 OCSP 装订提升可信度
虽非 SSL 协议本身,但以下配置直接影响 TLS 连接的安全感知与性能:
-
ssl_session_cache shared:SSL:10m;和ssl_session_timeout 10m;启用会话复用,减少 TLS 握手开销 -
ssl_stapling on;+ssl_stapling_verify on;开启 OCSP 装订,避免客户端直连 CA 查询状态,加快验证并增强隐私 -
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;强制浏览器后续请求只走 HTTPS(HSTS)










