You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

azurerm_key_vault_certificate生成新证书能否设密码?及相关困境咨询

Azure密钥库自签名证书:SAN添加与密码设置解决方案

一、门户创建带SAN的自签名证书

你大概率是没找到门户里添加SAN的正确入口,按以下步骤操作就能搞定:

  • 进入目标密钥库的「证书」界面,点击「生成/导入」
  • 填写证书名称等基础信息后,找到并展开「证书策略」区域
  • 点击「配置证书策略」,在弹窗里找到「使用者备用名称」选项,添加需要的DNS名称或其他类型SAN
  • 确认策略配置后,完成后续流程即可生成带SAN的自签名证书

二、Terraform生成带密码的自签名证书

你提到的Terraform原生资源里,密码确实只能在导入证书的certificate块中设置,但可以通过「生成证书→导出加密→重新导入」的流程实现需求:

具体实现代码示例

# 第一步:生成带SAN的自签名证书(允许导出)
resource "azurerm_key_vault_certificate" "initial_cert" {
  name         = "my-initial-cert"
  key_vault_id = azurerm_key_vault.my_vault.id

  certificate_policy {
    issuer_parameters {
      name = "Self"
    }

    key_properties {
      exportable = true  # 必须开启,否则无法导出PFX
      key_size   = 2048
      key_type   = "RSA"
      reuse_key  = true
    }

    secret_properties {
      content_type = "application/x-pkcs12"
    }

    x509_certificate_properties {
      subject            = "CN=my-domain.com"
      validity_in_months = 12

      subject_alternative_names {
        dns_names = ["my-domain.com", "app.my-domain.com"]
      }
    }
  }
}

# 第二步:导出证书并设置密码(依赖Azure CLI和OpenSSL)
resource "null_resource" "encrypt_cert" {
  depends_on = [azurerm_key_vault_certificate.initial_cert]

  provisioner "local-exec" {
    command = <<EOT
      # 从密钥库下载证书PFX
      az keyvault secret download --vault-name ${azurerm_key_vault.my_vault.name} --name ${azurerm_key_vault_certificate.initial_cert.name} --file ./temp-cert.pfx --encoding base64
      # 重新导出并设置密码
      openssl pkcs12 -in ./temp-cert.pfx -out ./secured-cert.pfx -export -passout pass:MySecurePass123!
    EOT
  }
}

# 第三步:导入带密码的PFX到密钥库
resource "azurerm_key_vault_certificate" "secured_cert" {
  name         = "my-secured-cert"
  key_vault_id = azurerm_key_vault.my_vault.id

  certificate {
    contents = filebase64("./secured-cert.pfx")
    password = "MySecurePass123!"
  }

  depends_on = [null_resource.encrypt_cert]
}

注意事项

  • 确保密钥库的访问策略允许当前服务主体/用户执行证书下载和导入操作
  • 本地环境需要安装Azure CLI和OpenSSL工具
  • 密码要符合Azure密钥库的密码复杂度要求

如果不想依赖本地工具,也可以通过调用Azure Key Vault的REST API直接生成带密码的证书,但需要用Terraform的azurerm_rest_api资源来实现,复杂度会高一些。

内容的提问来源于stack exchange,提问作者Abuelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:43:14