Nginx入口控制器、SSL和可选的_no_ca [英] NGINX Ingress controller, SSL and optional_no_ca

查看:19
本文介绍了Nginx入口控制器、SSL和可选的_no_ca的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已从name.com获得证书。

➜ tree .     
.
├── ca.crt
├── vpk.crt
├── vpk.csr
└── vpk.key

我是如何创建秘密的

我在vpk.crt文件的末尾添加了ca.crt内容。

(⎈ | vpk-dev-eks:argocd)
➜ k create secret tls tls-secret --cert=vpk.crt --key=vpk.key --dry-run -o yaml | kubectl apply -f -

(⎈ | vpk-dev-eks:argocd)
➜ kubectl create secret generic ca-secret --from-file=ca.crt=ca.crt --dry-run -o yaml | kubectl apply -f -

这是我的入口:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: websockets-ingress
  namespace: development
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    # Enable client certificate authentication
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "optional_no_ca"
    # Create the secret containing the trusted ca certificates
    nginx.ingress.kubernetes.io/auth-tls-secret: "development/ca-secret"
    # Specify the verification depth in the client certificates chain
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
    # Specify if certificates are passed to upstream server
    nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
    argocd.argoproj.io/sync-wave: "10"
spec:
  tls:
    - hosts:
      - backend-dev.project.com
      secretName: tls-secret
  
  rules:
  - host: backend-dev.project.com
    http:
      paths:
      - path: /ws/
        backend:
          serviceName: websockets-service
          servicePort: 443

证书已正确验证,我可以通过各种CLI WebSocket客户端进行连接,https://www.ssllabs.com/ssltest为我提供了

但是,如果我设置

nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"

然后一切都停止工作,我在nginx入口控制器端(POD日志)收到400错误。

我和官方文件搞混了:

可选的_no_ca参数(1.3.8、1.2.5)请求客户端证书,但不要求它由受信任的CA证书签名。这是为了在nginx外部的服务执行实际证书验证的情况下使用。证书的内容可通过$SSL_CLIENT_CERT变量访问。

那么";Optional_no_ca";到底在做什么,为什么";上的";失败了请求?

auth

推荐答案_no_ca执行可选的客户端证书验证,当客户端证书未由来自auth-tls-secret的CA签名时,它不会使请求失败。即使在指定OPTIONAL_NO_CA参数之后,也需要提供客户端证书。如1文档中所述,实际的证书验证是在服务在Nginx外部时进行的。

设置nginx.ingress.kubernetes.io/auth-tls-verify-client:on,时 它请求一个客户端证书,该证书必须由包含在nginx.ingress.kubernetes.io/auth-tls-secret:秘名指定的密钥ca.crt的密钥中的证书签名。

如果不是,则证书验证将失败,并导致状态代码400(请求错误)。有关详细信息,请查看this

这篇关于Nginx入口控制器、SSL和可选的_no_ca的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆