我们正在尝试使用Terraform Incapsula来管理Imperva站点和自定义证书资源。
我们可以创建Imperva站点资源,但创建证书资源失败。
我们的用例是从Azure获取证书,并使用KeyVault导入到Imperva。我们使用Terraform "azurerm_key_vault_secret“数据源从KeyVault获取证书。它以证书字符串的形式返回证书,我们将该字符串作为“Base64”参数传递给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证书文件。
证书没有密码。
我们是不是做错了什么,或者这是一个内容包提供商的问题?
发布于 2020-06-09 23:36:47
查看提供者的源代码,它看起来已经在作为AddCertificate函数的一部分执行base64编码操作,这意味着使用Terraform filebase64函数是对证书进行双重编码。
相反,我认为它应该是这样的:
resource "incapsula_custom_certificate" "custom-certificate" {
site_id = incapsula_site.site.id
certificate = file("certificate.pfx")
}发布于 2020-06-10 23:35:09
如果从azure返回的值是base64,那么类似这样的东西也可以工作。
certificate = base64decode(data.azurerm_key_vault_secret.cert.value)发布于 2020-06-11 03:49:09
您是否尝试过创建自签名证书,使用密码短语将其转换为PFX并使用它?
我之所以问这个问题,是因为Azure的PFX输出有一个空的/不存在的密码短语,而这些年来,我遇到了一些工具的问题,除非你设置了密码短语,否则这些工具根本不会导入PFX。
https://stackoverflow.com/questions/62269748
复制相似问题