Terraform:“S3:path_to_terraform.tfstate”:x509:无法验证证书因为它不包含任何 IP SAN

Terraform:“S3:path_to_terraform.tfstate”:x509:无法验证证书因为它不包含任何 IP SAN

我正在使用 s3 来保存我的状态。因为这是一个自定义 S3(而不是 AWS),所以我按如下所示对其进行了配置(使用 IP + 端口)。

运行 terraform init 时我收到此错误:

成功配置后端“s3”!除非后端配置发生变化,否则 Terraform 将自动使用此后端。刷新状态时出错:RequestError:发送请求失败,原因为:获取“https://custom_S3_server_IP:8082/mytest/my_sub_folder/terraform.tfstate”:x509:无法验证 custom_S3_server_IP 的证书,因为它不包含任何 IP SAN

通常当我遇到这样的问题时,我会假设它是端点(dns)验证。但似乎我无法使用 Terraform 禁用它。这是我的 S3 配置:

  backend "s3" {
    region = "DEGO"
    skip_region_validation = true
    force_path_style = true
    bucket = "mytest"
    key = "my_sub_folder/terraform.tfstate"
    access_key = "myK"
    secret_key = "myS"
    endpoint = "custom_S3_server_IP:8082"
  } 

编辑:我知道证书不包含输入的 IP,但在每个有此问题的客户端中,总有一种方法可以禁用 DNS 验证。例如,Terraform aws 实现可以使用“--no-verify-ssl”选项来解决这个问题,但我找不到任何使用类似这样的属性

答案1

您的 S3 服务器的 TLS 证书未在其“主题备用名称”字段中列出 IP 地址。您需要在 S3 服务器中使用具有此 IP 地址的正确证书。

一个更简单的替代方法是在 URL 中使用 DNS 名称,并确保您的证书在其 SAN 字段中具有 DNS 名称。

答案2

似乎目前没有选项可以禁用使用 terraform s3 作为状态存储桶的 tls 验证。

以下是一个未解决问题的参考:

https://github.com/hashicorp/terraform/issues/26883

相关内容