SSL 陷阱
证书
ssl_certificate必须是完整证书链(证书 + 中间证书)— 仅证书 = 浏览器警告- 证书链顺序很重要:证书在前,中间证书在后,不含根证书
- 密钥和证书不匹配 = nginx 启动报错但信息晦涩
- 证书过期 = nginx 正常启动但浏览器拒绝
配置
ssl on已废弃 — 使用listen 443 sslssl_protocols TLSv1 TLSv1.1= 不安全 — 至少 TLSv1.2ssl_prefer_server_ciphers on对 TLS 1.3 不再推荐 — 仅用于 1.2ssl_ciphers顺序不当 = 服务器选择弱密码套件
OCSP Stapling
ssl_stapling on不加ssl_trusted_certificate= stapling 静默关闭- OCSP 需要 DNS 解析器 — 没有 local resolver 时加
resolver 8.8.8.8 - 部分 CA 的 OCSP 服务慢/不稳定 — 可能增加延迟
HTTP/2
http2指令在 listen 中配置,不是独立模块http2_push在 nginx 1.25+ 已废弃- HTTP/2 + 代理到 HTTP/1.1 后端可行 — 但失去多路复用
- HTTP/2 可能需要调整
large_client_header_buffers
客户端证书
ssl_verify_client on无证书时拒绝 — 使用optional使其可选ssl_client_certificate是 CA 证书,不是客户端证书$ssl_client_verify的值是 "SUCCESS",不是 "true" 或 "1"- CRL 检查需要额外配置 — 没有它会接受已撤销的证书
常见错误
- 重定向循环:80→443→80,因为未检查
X-Forwarded-Proto - 混合内容:HTTPS 页面加载 HTTP 资源 —
upgrade-insecure-requests有帮助 - HSTS 的 max-age 太长 + 证书无效 = 网站不可访问
example.com的证书不覆盖www.example.com— 需要 SAN 或通配符