Skip to content

SSL 陷阱

证书

  • ssl_certificate 必须是完整证书链(证书 + 中间证书)— 仅证书 = 浏览器警告
  • 证书链顺序很重要:证书在前,中间证书在后,不含根证书
  • 密钥和证书不匹配 = nginx 启动报错但信息晦涩
  • 证书过期 = nginx 正常启动但浏览器拒绝

配置

  • ssl on 已废弃 — 使用 listen 443 ssl
  • ssl_protocols TLSv1 TLSv1.1 = 不安全 — 至少 TLSv1.2
  • ssl_prefer_server_ciphers on 对 TLS 1.3 不再推荐 — 仅用于 1.2
  • ssl_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 或通配符

由云锦鸿维护