Как получить шлюз приложений AzureRM для получения сертификата ACME .PEM в качестве доверенного_родчика_сертификатов в сквозной конфигурации AGW SSL? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь создать 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?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Если вы не укажете любой сертификат, шлюз приложения Azure v2 по умолчанию будет использовать сертификат на внутреннем веб-сервере, на который он перенаправляет трафик c. это исключает избыточную установку сертификатов, один на веб-сервере (в данном случае это граничный маршрутизатор Traefik) и один в бэкэнд AGW.

Это решает вопрос о том, как правильно отформатировать сертификат. К сожалению, я так и не смог установить сертификат, даже с инженером службы поддержки Microsoft по телефону. Он сказал: «Да, это выглядит хорошо, это должно работать, не знаю, почему это не так, вы можете просто избежать этого, используя шлюз v2 и вообще не устанавливая сертификат на серверную часть?»

Для шлюза v2 требуется тип и уровень skti stati c publi c IP и "Standard_v2", как показано выше.

0 голосов
/ 30 апреля 2020

Для меня единственное, что сработало, это использование тесно связанных Windows инструментов. Если вы будете следовать приведенной ниже документации, это сработает. Потратьте 2 дня на борьбу с той же проблемой:)

Документы Microsoft

...