一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何配置 Nginx 负载均衡网关以严格校验上游微服务节点返回的 TLS 证书合法性

时间:2026-06-19 09:18:46 编辑:袖梨 来源:一聚教程网

要让Nginx严格校验上游微服务TLS证书,必须同时配置proxy_ssl_verify on、proxy_ssl_trusted_certificate、proxy_ssl_name和proxy_ssl_server_name on四项指令,缺一不可且须同在location或upstream块内;此外建议补充proxy_ssl_verify_depth 3、proxy_ssl_protocols TLSv1.2 TLSv1.3及proxy_ssl_session_reuse off以增强安全性与稳定性。

要让 Nginx 负载均衡网关真正严格校验上游微服务节点返回的 TLS 证书,不能只写 proxy_ssl_verify on。必须四点齐备、协同生效,否则会静默降级或直接返回 502 错误。

必须同时配置的四个核心指令

这四项缺一不可,且需全部写在 locationupstream 块内(httpserver 块中声明无效):

  • proxy_ssl_verify on; —— 明确启用上游证书校验开关(默认是 off)
  • proxy_ssl_trusted_certificate /etc/nginx/ssl/upstream-ca.crt; —— 指向 PEM 格式的可信根/中间 CA 证书文件,只含证书,不含私钥或终端证书
  • proxy_ssl_name "auth-svc.default.svc.cluster.local"; —— 显式声明期望匹配的域名,用于比对证书中的 Subject Alternative Name(SAN),尤其当 upstream 使用 IP 或内部 DNS 名时必须设置
  • proxy_ssl_server_name on; —— 启用 TLS SNI 扩展,确保握手时向后端发送正确的 Server Name,对接多租户、泛域名或云服务后端时必不可少

提升校验稳定性和安全性的关键补充

仅配齐四项还不够,以下配置能覆盖常见生产场景:

  • proxy_ssl_verify_depth 3; —— 默认只验证 1 层(终端直连根 CA),但多数微服务使用“终端 → 中间 CA → 根 CA”三级链,设为 3 更稳妥
  • proxy_ssl_protocols TLSv1.2 TLSv1.3; —— 禁用 TLSv1.0/v1.1,防止协议降级干扰证书验证逻辑
  • proxy_ssl_session_reuse off; —— 关闭 TLS session 复用,避免缓存异常证书状态导致后续请求绕过重校验

可信证书文件的准备要点

proxy_ssl_trusted_certificate 所指文件必须满足:

  • 格式为纯 PEM,每张证书以 -----BEGIN CERTIFICATE----- 开头、-----END CERTIFICATE----- 结尾
  • 只包含可信根 CA 和中间 CA 证书(可多个拼接),顺序不限
  • 路径需 Nginx worker 进程可读(建议权限 644),推荐放在 /etc/nginx/ssl/upstream-ca.crt
  • 可用命令快速验证:openssl pkcs7 -print_certs -in /path/to/file.crt -noout 能正常输出即为合法

验证是否真正生效的方法

配置重载后,不能只看 Nginx 启动成功:

  • 发起真实请求,观察响应状态码;若仍返回 502 或日志出现 certificate verify failed,说明某项配置缺失或不匹配
  • 开启 debug 日志(临时):error_log /var/log/nginx/error.log debug;,查看 TLS 握手细节(注意生产环境慎用)
  • 重点检查 error log 中是否含 SSL_do_handshake() failedunable to get issuer certificate 等线索

热门栏目