Terraform 配置 Chef Provisioner – 无法验证证书中是否包含 IP SANs

90次阅读
没有评论

问题描述

在配置 Chef Provisioner 时,在运行 ‘terraform apply’ 后遇到以下错误:

chef_environment.terraform_01: Post https://10.90.239.223/organizations/mykitchen/environments: x509: cannot validate certificate for 10.90.239.223 because it doesn't contain any IP SANs

用户尝试了一些方法,但仍然无法解决该问题。

解决方案

以下解决方案中可能涉及版本差异和风险操作,请在执行前做好备份并谨慎操作。

方案1:使用 Certstrap 生成证书

在这个问题中,用户遇到的主要问题是证书中不包含 IP SANs。使用 openssl req 生成的输出实际上是证书签名请求 (CSR),而不是证书本身。为了解决这个问题,可以考虑使用更方便的工具,例如 Certstrap,来生成内部证书,以确保证书符合现代标准。

以下是使用 Certstrap 生成证书的步骤:

  1. 首先,确保你已经安装了 Certstrap。你可以在其官方 GitHub 仓库找到安装方法。

  2. 使用 Certstrap 生成证书和密钥文件。下面是一个示例命令:
    bash
    certstrap --depot-path <certstrap_depot_path> request-cert --domain 10.90.239.223
    certstrap --depot-path <certstrap_depot_path> sign 10.90.239.223

  3. 在你的 Terraform 配置中,使用生成的证书和密钥文件:
    hcl
    provisioner "chef" {
    ...
    client_cert = file("<certstrap_depot_path>/10.90.239.223.crt")
    client_key = file("<certstrap_depot_path>/10.90.239.223.key")
    ...
    }

方案2:使用 Certbot 生成证书

另一种方法是使用 Certbot 来生成证书。Certbot 是一个自动化证书管理工具,可以简化证书生成和更新的过程。

以下是使用 Certbot 生成证书的步骤:

  1. 首先,确保你已经安装了 Certbot。你可以在其官方网站或仓库找到安装方法。

  2. 运行 Certbot 命令来生成证书。示例如下:
    bash
    certbot certonly --standalone -d 10.90.239.223

  3. Certbot 将会引导你完成生成证书的过程。完成后,你可以在 Certbot 的默认证书存储路径中找到生成的证书和密钥文件。

  4. 在 Terraform 配置中,使用生成的证书和密钥文件:
    hcl
    provisioner "chef" {
    ...
    client_cert = file("/etc/letsencrypt/live/10.90.239.223/fullchain.pem")
    client_key = file("/etc/letsencrypt/live/10.90.239.223/privkey.pem")
    ...
    }

方案3:检查 Provisioner 配置

如果你已经生成了正确的证书,但仍然遇到问题,那么可能是 Provisioner 的配置问题。确保在 Terraform 配置中,你正确地指定了生成的证书和密钥文件的路径。

同时,你在 Chef Provisioner 配置中设置了 ssl_verify_mode = ":verify_none",这将跳过 SSL 验证。如果你的环境允许的话,你可以尝试删除这个配置,以启用 SSL 验证,从而提高安全性。

方案4:考虑使用 cfssl

除了 Certstrap 和 Certbot,还有其他工具可以用于生成证书,例如 Cloudflare 的 cfssl。你可以根据你的偏好选择适合你的工具。

结论

在配置 Chef Provisioner 时,遇到证书验证问题可能是因为证书不包含 IP SANs。通过使用 Certstrap、Certbot 或其他类似工具生成符合现代标准的证书,以及正确配置 Provisioner,你应该能够解决这个问题。如果问题仍然存在,可以考虑在社区中寻求帮助,以获取更多支持和建议。

正文完