3

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

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

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

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 代码:

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 证书文件。

证书没有密码阶段。

我们是在做错什么,还是这是 Incapsula 提供程序的问题?

4

3 回答 3

0

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

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

于 2020-06-10T19:49:08.583 回答
0

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

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

resource "incapsula_custom_certificate" "custom-certificate" {
  site_id = incapsula_site.site.id
  certificate = file("certificate.pfx")
}
于 2020-06-09T15:36:46.683 回答
0

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

certificate = base64decode(data.azurerm_key_vault_secret.cert.value)
于 2020-06-10T15:35:08.667 回答