如何在启用 tls 的情况下连接到 nomad/consul UI?
Posted
技术标签:
【中文标题】如何在启用 tls 的情况下连接到 nomad/consul UI?【英文标题】:How to connect to the nomad/consul UI with tls enabled? 【发布时间】:2021-09-26 00:14:52 【问题描述】:我现在正在研究 Hashistack 并尝试在其上部署基于宠物微服务的项目。我在裸机节点上部署了具有 Ansible 角色的 Nomad 和 Consul 集群:
https://github.com/ansible-community/ansible-consul.git (v2.5.4) https://github.com/ansible-community/ansible-nomad.git (v1.9.6)Nomad 和 Consul 的服务器放在同一个节点上。
我不使用保险柜。我创建了单独的私有 CA,为这些服务生成了 TLS 证书和私钥,并配置了 Nomad 和 Consul 服务器和客户端来使用它们。
我的目标是设置生产就绪的 Hashistack 集群。所以我想为这两个服务设置完整的 TLS。
我通过 HTTP 成功连接到两个 UI,但是当我尝试 HTTPS 时,我收到 SSL_ERROR_BAD_CERT_ALERT 错误。
如果您建议在生产环境中操作 Hashistack 的最佳实践以及所需的步骤,我将不胜感激。
谢谢!
【问题讨论】:
【参考方案1】:我有点迟回复,但遇到了同样的错误。想我会留下我的解决方案,以防未来的读者发现它有帮助......
对我来说,问题归结为我的 Nomad tls
配置块中的 verify_https_client
标志。由于 Nomad 配置为双向 TLS,所有客户端(包括 Web 浏览器)都需要提供由 Nomad 使用的同一 CA 签名的客户端证书才能连接。您需要生成/签署该证书,并查看如何配置您的浏览器以在需要时自动提供它。
对于生产用途,这是最安全的途径。对于开发环境,您只需在 Nomad 配置中将 verify_https_client
配置设置为 false
。
这是该标志的 Nomad 文档的链接:https://www.nomadproject.io/docs/configuration/tls#verify_https_client
【讨论】:
您好,如果 verify_https_client = true ,您如何从 Web 浏览器打开?【参考方案2】:您首先需要为您的网络浏览器生成一个客户端证书。
然后将其转换为 PKCS12 格式。
openssl pkcs12 -export -inkey ./nomad-cli.key -in ./nomad-cli.pem -out ./nomad-cli.p12
假设您正在使用 Chrome,
转到chrome://settings/certificates?search=certificate
并导入转换后的证书nomad-cli.p12
。
【讨论】:
【参考方案3】:我找到了相同案例的答案。
当使用 mTLS 部署 nomad 集群时,需要将 cli 密钥部署到每个服务器节点或至少在您配置连接的节点上。
指令https://learn.hashicorp.com/tutorials/nomad/security-enable-tls#nomad-ca-key-pem生成的cli键
和指令https://learn.hashicorp.com/tutorials/nomad/reverse-proxy-ui?in=nomad/manage-clusters配置的nginx
但是本手册不包含配置 mTLS 的描述。
您需要在位置/中添加以下参数。
location /
....
proxy_pass https://127.0.0.1:4646;
proxy_ssl_certificate /etc/nomad.d/cli.pem;
proxy_ssl_certificate_key /etc/nomad.d/cli-key.pem;
proxy_ssl_verify off;
....
在这种情况下,nginx 可以使用 TLS 连接带有游牧 http 端口的加密连接。 也不要忘记至少启用 http 基本身份验证。
【讨论】:
以上是关于如何在启用 tls 的情况下连接到 nomad/consul UI?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不强制断开连接的情况下使用 Go TLS 手动验证客户端证书?
如何在不使用 *** 映像的情况下连接到 docker 中的 ***?