Я пытаюсь создать azurerm backend_http_settings в Azure Application Gateway v2.0, используя Terraform и Letsencrypt через поставщика ACME.
Я могу успешно создать сертификат и импортировать .pfx в веб-интерфейс https: приемники прослушивания, acme и azurerm предоставляют все необходимое для обработки pkcs12.
К сожалению, бэкэнд хочет .cer-файл, предположительно закодированный в base64, а не DER, и я не могу заставить его работать независимо от того, что я пытаюсь. Насколько я понимаю, что файл letsencrypt .pem должен подойти для этого, но когда я пытаюсь использовать certificate_pem провайдера acme в качестве trust_root_certificate, я получаю следующую ошибку:
Ошибка: Ошибка создания / обновления Шлюз приложения "agw-frontproxy" (группа ресурсов "rg-mir"): network.ApplicationGatewaysClient # CreateOrUpdate: Ошибка отправки запроса: StatusCode = 400 - Исходная ошибка: Code = "ApplicationGatewayTrustedRootCertificateInvalidData" Message = "Данные для сертификата ... / провайдеры / Microsoft.Network / applicationGateways / agw-frontproxy /rustRootCertificates / vnet -mir-be-cert недействительны. " Подробности = []
План terraform работает нормально, вышеуказанная ошибка возникает во время применения terraform, когда провайдер azurerm рассердился, что данные сертификата являются недействительными. Я записал сертификаты на диск, и они выглядят так, как я ожидал. Ниже приведен фрагмент кода с соответствующим кодом:
locals {
https_setting_name = "${azurerm_virtual_network.vnet-mir.name}-be-tls-htst"
https_frontend_cert_name = "${azurerm_virtual_network.vnet-mir.name}-fe-cert"
https_backend_cert_name = "${azurerm_virtual_network.vnet-mir.name}-be-cert"
}
provider "azurerm" {
version = "~>2.7"
features {
key_vault {
purge_soft_delete_on_destroy = true
}
}
}
provider "acme" {
server_url = "https://acme-staging-v02.api.letsencrypt.org/directory"
}
resource "acme_certificate" "certificate" {
account_key_pem = acme_registration.reg.account_key_pem
common_name = "cert-test.example.com"
subject_alternative_names = ["cert-test2.example.com", "cert-test3.example.com"]
certificate_p12_password = "<your password here>"
dns_challenge {
provider = "cloudflare"
config = {
CF_API_EMAIL = "<your email here>"
CF_DNS_API_TOKEN = "<your token here>"
CF_ZONE_API_TOKEN = "<your token here>"
}
}
}
resource "azurerm_application_gateway" "agw-frontproxy" {
name = "agw-frontproxy"
location = azurerm_resource_group.rg-mir.location
resource_group_name = azurerm_resource_group.rg-mir.name
sku {
name = "Standard_v2"
tier = "Standard_v2"
capacity = 2
}
trusted_root_certificate {
name = local.https_backend_cert_name
data = acme_certificate.certificate.certificate_pem
}
ssl_certificate {
name = local.https_frontend_cert_name
data = acme_certificate.certificate.certificate_p12
password = "<your password here>"
}
# Create HTTPS listener and backend
backend_http_settings {
name = local.https_setting_name
cookie_based_affinity = "Disabled"
port = 443
protocol = "Https"
request_timeout = 20
trusted_root_certificate_names = [local.https_backend_cert_name]
}
Как получить шлюз приложений AzureRM для получения сертификата ACME .PEM в качестве доверенного_рушения_certificates в сквозной конфигурации AGW SSL?