如何设置proxy_ssl_verify_depth以增强内网微服务代理间通信的信任链安全?

2026-05-02 23:054阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计753个文字,预计阅读时间需要4分钟。

如何设置proxy_ssl_verify_depth以增强内网微服务代理间通信的信任链安全?

要使Nginx在反向代理内网微服务时正确验证HTTPS证书,请确保以下步骤:

理解 proxy_ssl_verify_depth 的实际作用

该指令定义 Nginx 在验证后端证书时,最多允许多少级证书签发路径。默认值为 1,只接受“终端证书 → 根 CA”这种直连结构。但内网微服务普遍使用私有 CA 签发的证书,常见结构是:

  • 终端证书(微服务自身)
  • 中间 CA 证书(企业内部二级签发机构)
  • 根 CA 证书(内网 PKI 的信任锚)

此时需将 proxy_ssl_verify_depth 设为 3,否则即使证书合法、信任库完整,也会因链过长而报 certificate verify failed,返回 502 错误。

必须同步配置的四项核心指令

仅改 depth 值无效,以下四者缺一不可:

  • proxy_ssl_verify on; —— 明确开启上游证书校验(默认是 off)
  • proxy_ssl_trusted_certificate /etc/nginx/ssl/internal-ca.pem; —— 指向 PEM 文件,内容仅含根 CA 和中间 CA 证书(顺序:根 → 中间),不能含私钥或终端证书
  • proxy_ssl_name "svc.internal.company"; —— 显式声明期望的后端服务域名,用于匹配证书中的 SAN 字段;若 proxy_pass 使用变量或 IP,此项必不可少
  • proxy_ssl_server_name on; —— 启用 TLS SNI,确保握手时发送正确域名,避免后端返回默认或不匹配的证书

针对内网场景的推荐取值与验证方式

根据你内网 PKI 的实际层级设定 depth:

  • 自签名证书(无中间层)→ 设为 1,且 trusted_certificate 中必须包含该自签根证书
  • 一级中间 CA(终端 → 中间 → 根)→ 设为 23,推荐 3 以留出扩展余量
  • 二级中间 CA(终端 → 中间1 → 中间2 → 根)→ 设为 4,但应评估是否过度嵌套

验证是否生效:

  • 重载 Nginx 后观察 error.log,无 SSL_do_handshakeverify failed 即初步成功
  • 手动测试链完整性:openssl s_client -connect svc.internal.company:443 -servername svc.internal.company,检查输出中 Verify return code: 0 (ok)

增强内网通信安全的补充建议

在基础校验之上,可进一步加固:

  • 禁用老旧协议:proxy_ssl_protocols TLSv1.2 TLSv1.3;,防止降级攻击
  • 关闭会话复用:proxy_ssl_session_reuse off;,避免异常证书被缓存绕过校验
  • 确保文件权限严格:trusted_certificate 文件仅对 nginx worker 进程可读(如 644,属主 root)
  • 定期轮换内网 CA 证书,并同步更新 Nginx 的信任文件
标签:SSLProxy

本文共计753个文字,预计阅读时间需要4分钟。

如何设置proxy_ssl_verify_depth以增强内网微服务代理间通信的信任链安全?

要使Nginx在反向代理内网微服务时正确验证HTTPS证书,请确保以下步骤:

理解 proxy_ssl_verify_depth 的实际作用

该指令定义 Nginx 在验证后端证书时,最多允许多少级证书签发路径。默认值为 1,只接受“终端证书 → 根 CA”这种直连结构。但内网微服务普遍使用私有 CA 签发的证书,常见结构是:

  • 终端证书(微服务自身)
  • 中间 CA 证书(企业内部二级签发机构)
  • 根 CA 证书(内网 PKI 的信任锚)

此时需将 proxy_ssl_verify_depth 设为 3,否则即使证书合法、信任库完整,也会因链过长而报 certificate verify failed,返回 502 错误。

必须同步配置的四项核心指令

仅改 depth 值无效,以下四者缺一不可:

  • proxy_ssl_verify on; —— 明确开启上游证书校验(默认是 off)
  • proxy_ssl_trusted_certificate /etc/nginx/ssl/internal-ca.pem; —— 指向 PEM 文件,内容仅含根 CA 和中间 CA 证书(顺序:根 → 中间),不能含私钥或终端证书
  • proxy_ssl_name "svc.internal.company"; —— 显式声明期望的后端服务域名,用于匹配证书中的 SAN 字段;若 proxy_pass 使用变量或 IP,此项必不可少
  • proxy_ssl_server_name on; —— 启用 TLS SNI,确保握手时发送正确域名,避免后端返回默认或不匹配的证书

针对内网场景的推荐取值与验证方式

根据你内网 PKI 的实际层级设定 depth:

  • 自签名证书(无中间层)→ 设为 1,且 trusted_certificate 中必须包含该自签根证书
  • 一级中间 CA(终端 → 中间 → 根)→ 设为 23,推荐 3 以留出扩展余量
  • 二级中间 CA(终端 → 中间1 → 中间2 → 根)→ 设为 4,但应评估是否过度嵌套

验证是否生效:

  • 重载 Nginx 后观察 error.log,无 SSL_do_handshakeverify failed 即初步成功
  • 手动测试链完整性:openssl s_client -connect svc.internal.company:443 -servername svc.internal.company,检查输出中 Verify return code: 0 (ok)

增强内网通信安全的补充建议

在基础校验之上,可进一步加固:

  • 禁用老旧协议:proxy_ssl_protocols TLSv1.2 TLSv1.3;,防止降级攻击
  • 关闭会话复用:proxy_ssl_session_reuse off;,避免异常证书被缓存绕过校验
  • 确保文件权限严格:trusted_certificate 文件仅对 nginx worker 进程可读(如 644,属主 root)
  • 定期轮换内网 CA 证书,并同步更新 Nginx 的信任文件
标签:SSLProxy