我正在从传统的docker主机迁移到kubernetes集群。
我希望在迁移期间保持服务的连续性。
为此,我将本地nginx代理到远程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:这是真正的主机,因此您可以进行测试,该问题是实时存在的。
答案 0 :(得分:0)
我认为有两件事阻止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来指示浏览器正在发生的不良SSL结果(谁不容易拥有{{ 1}})。
话虽如此,我相信有可能实际生成一个伪造的CA,然后针对它颁发证书,将其安装在nginx中,然后将伪造的CA馈送到--insecure
(或者,如果需要,将CA安装到操作系统的受信任证书存储中。
如果有更多细节对您有所帮助,请进行后续操作。