簡體   English   中英

Terraform 封裝提供程序無法創建自定義證書資源

[英]Terraform Incapsula provider fails to create custom certificate resource

我們正在嘗試使用 Terraform Incapsula privider 來管理 Imperva 站點和自定義證書資源。

我們能夠創建 Imperva 站點資源,但證書資源創建失敗。

我們的用例是從 Azure KeyVault 獲取證書並使用 Incapsula Privider 將其導入 Imperva。 我們使用 Terraform "azurerm_key_vault_secret" 數據源從 KeyVault 獲取證書。 它將證書作為 Base64 字符串返回,我們將其作為“certificate”參數傳遞到 Terraform“incapsula_custom_certificate”資源以及使用 Z303E96F80576360D0C7B07AE_BZZincapula 資源創建的 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" function 以 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 證書文件。

證書沒有passphase。

我們是在做錯什么,還是這是 Incapsula 提供程序的問題?

Looking through the source code of the provider it looks like it is already performing a base64 encode operation as part of the AddCertificate function, which means using the Terraform filebase64 function is double-encoding the certificate.

相反,我認為它應該是這樣的:

resource "incapsula_custom_certificate" "custom-certificate" {
  site_id = incapsula_site.site.id
  certificate = file("certificate.pfx")
}

如果 azure 的返回值是 base64 那么這樣的東西也可以工作。

certificate = base64decode(data.azurerm_key_vault_secret.cert.value)

您是否嘗試過創建自簽名證書、使用密碼將其轉換為 PFX 並使用它?

我問是因為 Azure 的 PFX output 有一個空白/不存在的密碼短語,而且多年來我遇到了一些工具的問題,除非你設置密碼短語,否則它們根本不會導入 PFX。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM