具有自定义 TLS 证书链的 OpenShift Web 控制台仍然存在 "unsecured"

OpenShift web console with custom TLS certificate chain remains "unsecured"

在 OpenShift Origin 3.6 中,使用高级安装方法,我为 Web 控制台和路由器配置了自定义 TLS 证书。

对于 web 控制台,我在 Ansible 清单中使用的参数是:

openshift_master_named_certificates=[{"certfile": "/root/star.paas.certs/star.paas.local.cert.pem", "keyfile": "/root/star.paas.certs/star.paas.local.key.pem", "names": ["master.paas.local"], "cafile": "/root/star.paas.certs/ca-chain.cert.pem"}]
openshift_master_overwrite_named_certificates=true

对于路由器,参数为:

openshift_hosted_router_certificate={"certfile": "/root/star.paas.certs/star.paas.local.cert.pem", "keyfile": "/root/star.paas.certs/star.paas.local.key.pem", "cafile": "/root/star.paas.certs/ca-chain.cert.pem"}

在 TLS 证书方面,已创建自定义证书颁发机构并将其保存到文件 ca-chain.cert.pem。并且已生成基于此 CA 的自定义证书(star.paas.local.key.pemstar.paas.local.cert.pem)。

您可能已经注意到,我对 OpenShift Web 控制台(在我的案例中在 master.paas.local:8443 提供服务)和嵌入式路由器(对于路由为 https://*.paas.local 的应用程序)使用相同的证书链.

然后,当我要访问web控制台时,前提是在我的浏览器中导入根CA。

重点是:当我使用 Chromium 并转到 master.paas.local:8443 时,连接被认为是不安全的 (NET::ERR_CERT_AUTHORITY_INVALID)。当我询问更多信息时,我注意到证书层次结构不完整:

Certificate details in Chromium

有趣的是,这不会发生在 Firefox 中,它是我所知道的唯一一个以预期方式运行的浏览器:

Certificate details in Firefox

相反,OpenShift 为我的应用程序提供的所有受 TLS 保护的 public 路由都被我测试的所有浏览器认为是安全的,具有与我用于网络的完全相同的证书链控制台。

在所有现代浏览器中为 Web 控制台提供服务时,是否有可行的方法让 openshift(-ansible) 考虑我的自定义 CA? 在我看来,OpenShift Web 控制台在 TLS 握手期间不会发送 root/intermediate CA。

ansible 剧本似乎支持为 named_certificates 提供 cafile 并放置文件。但是 运行 系统不支持 cafile 键,所以它被忽略了。如果您将证书文件作为完整的捆绑包(捆绑包+证书)提供,那么它应该开始工作。

我提交了 PR to the playbook to handle this task