You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes的Nginx Ingress Controller中验证mTLS证书链

实现基于完整证书链的Nginx Ingress mTLS

要验证包含根CA→CA A→CA B→CA C→客户端证书的完整信任链,你需要完成以下关键步骤:

1. 构建完整的信任链证书文件

将所有需要信任的CA证书(根CA、CA A、CA B、CA C)合并为一个PEM格式文件,确保Nginx能通过这些证书追溯到根CA完成验证。

执行命令合并证书(确保每个证书的PEM块完整,包含-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----):

cat root-ca.pem ca-a.pem ca-b.pem ca-c.pem > full-ca-chain.pem

2. 更新Kubernetes CA Secret

替换原有的ca-secret,使其包含合并后的完整信任链证书。Kubernetes TLS Secret要求必须包含tls.crt和tls.key字段,这里tls.key可使用根CA的私钥(Nginx验证客户端证书时不会用到该私钥,但需符合Secret格式要求):

# 删除原有Secret(如果存在)
kubectl delete secret ca-secret -n default

# 创建新的Secret,使用完整信任链证书
kubectl create secret tls ca-secret -n default --cert=full-ca-chain.pem --key=root-ca.key

3. 调整Ingress注解的验证深度

修改Ingress的auth-tls-verify-depth注解,设置为匹配你的证书链长度。你的链从客户端证书到根CA共有4层验证层级(客户端→CA C→CA B→CA A→根),因此验证深度需设为4:

metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
    nginx.ingress.kubernetes.io/auth-tls-secret: default/ca-secret
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "4"

4. 验证配置生效

更新Ingress资源后,等待Nginx Ingress Controller自动加载新配置。可以通过以下方式验证:

  • 查看Ingress Controller Pod的日志,确认配置加载无错误
  • 进入Controller Pod查看生成的nginx.conf,确认存在ssl_client_certificate指向完整信任链、ssl_verify_depth 4和ssl_verify_client on配置

最后,使用带有客户端证书的请求测试:

curl --cert client-cert.pem --key client-key.pem https://your-ingress-domain/your-path

内容的提问来源于stack exchange,提问作者arwa abdelhalim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:12:33