上下文
我正在从传统的docker主机迁移到kubernetes集群。
我希望在迁移过程中保持服务的连续性。
为此,我将本地nginx代理到远程入口nginx。然后,我更新dns记录。这是一个很好的设置,有两个原因:
- 当dns传播时,流量继续流动
- 我可以在ingress nginx中生成一个让我们加密证书,所以一旦dns传播,我的客户端就会得到正确的证书
在没有生成证书的同时,nginx将获得默认的自签名证书。我知道这一点,所以我想对此进行验证,但我无法做到。
最低发行量
在不讨论nginx配置的情况下,我们只能用curl来重现这个问题。
这就是我获得远程自签名证书的方式:
openssl s_client -showcerts -servername standard.ingress.indie.host -connect standard.ingress.indie.host:443 < /dev/null | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p' > server.pem
我希望以下命令能起作用:
curl --cacert ./server.pem https://standard.ingress.indie.host
但事实并非如此。。我想知道我做错了什么,如果你能帮忙,那就太棒了!谢谢
PS:这是真正的主机,所以你可以测试一下,问题是直播的。
我认为有两件事阻止curl
命令按以下顺序工作:
X509v3 Basic Constraints: critical CA:FALSE
X509v3 Subject Alternative Name: DNS:ingress.local
O=Acme Co, CN=Kubernetes Ingress Controller Fake Certificate
证书不是CA,它只是自签名的。因此,(据我所知(--cacert
的no值将表示X509层次结构中的"父",并使curl能够信任CA证书的子证书。
然而,即使该证书有一个假设的颁发CA,它也只为ingress.local
的SAN颁发,而standard.ingress.indie.host
肯定不匹配。
从你的问题中,我无法判断curl --insecure
是否适合你,或者你只是在使用curl来指示浏览器(他们不容易拥有--insecure
(正在发生的糟糕的SSL结果。
话虽如此,我相信有可能实际生成一个伪CA,然后针对它颁发证书,将其安装在nginx中,然后将伪CA提供给curl --cafile
(或者,如果需要,将CA安装到操作系统的可信证书存储中(。
如果有更多细节你会觉得有帮助,请跟进。