首页/安全/加密与证书速查/回源/后端 TLS 校验配置

回源/后端 TLS 校验配置

反向代理到 HTTPS 上游时关闭证书校验会让回源流量可被中间人替换。正确做法是指定受信 CA 文件并开启校验,同时让 SNI 与上游证书 SAN 一致。

加密与证书速查安全更新于 2026-10-13

回源 TLS 校验配置

反向代理到 HTTPS 上游时,如果关闭证书校验,回源流量就可能被中间人替换或窃听,而外层 TLS 看起来一切正常,问题被隐藏在内部链路上。nginx 的 proxy_ssl_verify 默认是关闭的,很多配置沿用了多年也没打开。正确做法是指定受信 CA 文件并开启校验,同时让校验使用的名称与上游证书中的 SAN 保持一致。

基本信息

默认行为nginx proxy_ssl_verify 默认为 off,需要显式开启
信任文件proxy_ssl_trusted_certificate 指向上游 CA 或完整链
名称匹配proxy_ssl_name 指定校验用的主机名,IP 直连场景尤其需要
SNIproxy_ssl_server_name 控制是否发送 SNI
链深度proxy_ssl_verify_depth 按上游链长度设置

典型使用场景

  • 安全整改:清理历史上为「先跑通」而关闭的回源校验
  • 上游使用自签证书或私有 CA 时的信任配置
  • 排查「开启校验后出现 502」:多为名称不匹配或链不完整
  • 多上游场景逐个核对各自的信任文件
  • 灰度上线前在测试环境验证回源校验不影响业务

nginx 开启回源校验

nginx 开启回源校验
location / {
    proxy_pass https://backend.internal:8443;
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate /etc/nginx/ssl/backend-ca.pem;
    proxy_ssl_verify_depth 3;
    proxy_ssl_server_name on;
    proxy_ssl_name backend.internal;
}

常见失败原因

现象原因处理
开启校验后 502上游证书链不完整补齐链或让上游发送完整链
名称不匹配用 IP 回源而证书只含域名把 proxy_ssl_name 配成证书中的名称
证书过期上游未及时续期上游续期后同步更新信任文件
自签证书被拒未导入专用 CA 文件把自签 CA 加入信任文件
自签回源应导入专用 CA 文件;上游更换证书后需要同步更新该信任文件,否则回源会失败。把这条依赖写进变更清单,避免上游团队换证之后下游才开始排查。
上线顺序建议:先在测试环境打开校验并保留日志,确认失败时能看到具体原因(名称不匹配还是链不完整),再灰度到生产。上游为自签证书时,把它的 CA 文件纳入配置管理,避免换人维护后不知道该更新哪个文件。

易错点

  • 为省事长期保留 proxy_ssl_verify off → 回源段完全失去校验,中间人可替换内容而外部看不出异常
  • 上游证书只有域名 SAN 而回源用 IP → 未配置 proxy_ssl_name 时校验直接失败
  • 忘记设置 proxy_ssl_verify_depth → 链较长时报验证深度不足
  • 上游换证后未更新信任文件 → 回源批量失败,影响覆盖全部请求

数据来源与参考

  • nginx 官方文档(proxy_ssl_verify / proxy_ssl_name)
  • NIST SP 800-52 Rev.2
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌