首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform封装提供程序无法创建自定义证书资源

Terraform封装提供程序无法创建自定义证书资源
EN

Stack Overflow用户
提问于 2020-06-09 03:23:25
回答 3查看 504关注 0票数 3

我们正在尝试使用Terraform Incapsula来管理Imperva站点和自定义证书资源。

我们可以创建Imperva站点资源,但创建证书资源失败。

我们的用例是从Azure获取证书,并使用KeyVault导入到Imperva。我们使用Terraform "azurerm_key_vault_secret“数据源从KeyVault获取证书。它以证书字符串的形式返回证书,我们将该字符串作为“Base64”参数传递给Terraform "incapsula_custom_certificate“资源以及使用Terraform "incapsula_site”资源创建的siteID。当我们运行"terraform apply“时,我们得到下面的错误。

代码语言:javascript
复制
incapsula_custom_certificate.custom-certificate: Creating...

Error: Error from Incapsula service when adding custom certificate for site_id ******807: {"res":2,"res_message":"Invalid input","debug_info":{"certificate":"invalid certificate or passphrase","id-info":"13007"}}

  on main.tf line 36, in resource "incapsula_custom_certificate" "custom-certificate":
  36: resource "incapsula_custom_certificate" "custom-certificate" { 

我们尝试使用Terraform "filebase64“函数从Base64编码的PFX文件中读取证书,但得到了相同的错误。

这是我们的Terraform代码:

代码语言:javascript
复制
provider "azurerm" {
  version = "=2.12.0"
  features {}
}

data "azurerm_key_vault_secret" "imperva_api_id" {
    name = var.imperva-api-id
    key_vault_id = var.kv.id
}

data "azurerm_key_vault_secret" "imperva_api_key" {
    name = var.imperva-api-key
    key_vault_id = var.kv.id
}

data "azurerm_key_vault_secret" "cert" {
  name = var.certificate_name
  key_vault_id = var.kv.id
}

provider "incapsula" {
  api_id = data.azurerm_key_vault_secret.imperva_api_id.value
  api_key = data.azurerm_key_vault_secret.imperva_api_key.value
}

resource "incapsula_site" "site" {
  domain = var.client_facing_fqdn
  send_site_setup_emails = true
  site_ip                = var.tm_cname
  force_ssl              = true
}

resource "incapsula_custom_certificate" "custom-certificate" {
  site_id = incapsula_site.site.id
  certificate =  data.azurerm_key_vault_secret.cert.value
  #certificate =   filebase64("certificate.pfx")
}

通过从Python脚本直接调用Imperva API,我们可以使用相同的站点ID、Imperva API ID和密钥导入相同的PFX证书文件。

证书没有密码。

我们是不是做错了什么,或者这是一个内容包提供商的问题?

EN

回答 3

Stack Overflow用户

发布于 2020-06-09 23:36:47

查看提供者的源代码,它看起来已经在作为AddCertificate函数的一部分执行base64编码操作,这意味着使用Terraform filebase64函数是对证书进行双重编码。

相反,我认为它应该是这样的:

代码语言:javascript
复制
resource "incapsula_custom_certificate" "custom-certificate" {
  site_id = incapsula_site.site.id
  certificate = file("certificate.pfx")
}
票数 0
EN

Stack Overflow用户

发布于 2020-06-10 23:35:09

如果从azure返回的值是base64,那么类似这样的东西也可以工作。

代码语言:javascript
复制
certificate = base64decode(data.azurerm_key_vault_secret.cert.value)
票数 0
EN

Stack Overflow用户

发布于 2020-06-11 03:49:09

您是否尝试过创建自签名证书,使用密码短语将其转换为PFX并使用它?

我之所以问这个问题,是因为Azure的PFX输出有一个空的/不存在的密码短语,而这些年来,我遇到了一些工具的问题,除非你设置了密码短语,否则这些工具根本不会导入PFX。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62269748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档