我现在正在研究 Hashistack 并尝试在其上部署基于 pet 微服务的项目。我在裸机节点上部署了具有 Ansible 角色的 Nomad 和 Consul 集群:
Nomad和Consul的服务器放在同一个节点上。
我不使用Vault。我创建了单独的私有 CA,为这些服务生成了 TLS 证书和私钥,并配置了 Nomad 和 Consul 服务器和客户端来使用它们。
我的目标是设置生产就绪的 Hashistack 集群。所以我想为这两项服务设置完整的 TLS。
我通过 HTTP 成功连接到两个 UI,但当我尝试 HTTPS 时,收到 SSL_ERROR_BAD_CERT_ALERT 错误。
如果您建议在生产中操作 Hashistack 的最佳实践以及需要执行哪些步骤,我将不胜感激。
谢谢!
您首先需要为您的网络浏览器生成客户端证书。
然后将其转换为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
。
我找到了相同案例的答案。
当使用 mTLS 部署的 nomad 集群需要将 cli 密钥部署到每个服务器节点或至少在您要配置连接的节点上。
指令生成的cli密钥https://learn.hashicorp.com/tutorials/nomad/security-enable-tls#nomad-ca-key-pem
以及通过指令配置的 nginx https://learn.hashicorp.com/tutorials/nomad/reverse-proxy-ui?in=nomad/manage-clusters
但是本手册不包含配置 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 与 nomad http 端口建立加密连接。 另外,至少不要忘记启用 http basic auth。
我回复有点晚了,但遇到了同样的错误。我想我会留下我的解决方案,以防未来的读者发现它有帮助......
对我来说,问题归结为我的 Nomad
verify_https_client
配置块中的 tls
标志。由于 Nomad 配置为相互 TLS,因此所有客户端(包括 Web 浏览器)都需要提供由 Nomad 使用的同一 CA 签名的客户端证书才能进行连接。您需要生成/签署该证书,并了解如何配置您的浏览器以在需要时自动提供该证书。
对于生产用途,这是最安全的途径。对于开发环境,您只需在 Nomad 配置中将
verify_https_client
配置设置为 false
。
这里是此标志的 Nomad 文档的链接:https://www.nomadproject.io/docs/configuration/tls#verify_https_client
我发现这个答案对我来说是正确的方法,但我想添加有关如何生成通过
openssl
命令导出的证书的额外上下文。
我通过中间 CA 颁发了证书:
vault write \
-format=json \
pki_int/issue/nomad \
common_name=client.global.nomad \
alt_names="${NOMAD_SERVER_IP},localhost" \
> nomad-cli.json
jq -r .data.ca_chain[] nomad-cli.json > ca.pem
jq -r .data.certificate nomad-cli.json > cert.pem
jq -r .data.private_key nomad-cli.json > key.pem
openssl \
pkcs12 -export \
-inkey key.pem \
-in cert.pem \
-out browser-cert.p12 \
-password pass:
我使用 Firefox 代替 Chrome,并通过
browser-cert.p12
导入了 Settings > Privacy & Security > Certificate > View Certificates > Your Certificates
证书文件。