informace ze zákulisí vývoje

SSL certifikát v Azure

17. 6. 2023 17:49
Rubrika: Aktuálně | Štítky: terraform

Jak jste se před 4 lety mohli zde dočíst, signály.cz běží v Azure - tj. v cloudu. Bohužel, Azure nenabízí zdarma automatický certifikát. Původně vůbec, aktuálně jenom pro signaly.cz, ale ne už pro wildcard *.signaly.cz.

 

Nezbylo mi při migraci nic jiného, než tam nahrát ručně generovaný Let's Encrypt zadarmo. Certifikát zadarmo má platnost asi 3 měsíce, normální placený kolem roku, někdy víc, ale to víc stojí. Roční tehdy stál cca 1500,-, bylo mi to tedy líto za to platit, ikdyž se s nahráváním certifikátu, respektive s generováním toho zdarma, pojí nemalé úsilí.

 

Abych ho vygeneroval, musel jsem jednou za 3 měsíce:

  1. Spustit příkaz
  2. Vykopírovat "hash".
  3. Přihlásit se do administrace DNS a nastavit onen hash
  4. Čekat, až se zpropaguje na DNS.
  5. Potom pokračovat v generování, dát enter. Certifikát se vygeneroval.
  6. Pak zakodovat certifikát dalším speciálním heslem.
  7. Stáhnout ho (protože jsem generování dělal na mém VPS, ne lokálně)
  8. Nahrát ho do Azure, vložit heslo.
  9. Přiřadit certifikát k potřebým doménám.

Ne nějak složité, ale rozhodně otravné a ještě k tomu dost pravidelně. Doménu jsme měli koupenou u Wedos a tam jsme také měli DNS. S tím je ale konec.

 

Nově DNS hostuje (zadarmo) Cloudflare. To je mezinárodní velké hráč s doménami. A základní DNS hosting je zadarmo - skvělé. Tím, že je mezinárodní, umí s ním spolupracovat i různé nástroje, v našem případě Terraform.

 

Terraform je automatizační nástroj pro infrastrukturu. Napíšete v něm definice, jak mají "věci" být. On pak porovná aktualní stav a chtěný stav, a to co chybí vytvoří, to co přebývá smaže, a to co se změnilo upraví. Umí spolupracovat s mnoha a mnoha službami. A já toho právě využil.

 

Nově v Terraformu zažádáme o potřebný certifikát. Terraform (respektive definice/provider v něm) si automaticky nahraje do Cloudlare DNS potřebný ověřovací hash, počká na to, pak dodělá certifikát a převede ho do potřebného zaheslovaného formátu.

 

Ale to není vše! Samozřejmě by byla pruda ho nahrávat, ale to jde také automatizovat. Takže terraform se dále spojí s Azure a nahraje tam certifikát, a propojí ho s potřebnými doménami. Lahoda.

 

Vypadá to cca takto:

 

resource "acme_certificate" "signalycz" {
  account_key_pem = acme_registration.reg.account_key_pem
  common_name = "signaly.cz"
  subject_alternative_names = ["*.signaly.cz"]
  certificate_p12_password = random_password.acme_signalycz_password.result
  dns_challenge {
    provider = "cloudflare"
  }
}

 

resource "azurerm_app_service_certificate" "signalycz_cert" {
  name = "signalycz-cert"
  resource_group_name = data.azurerm_resource_group.signalycz.name
  location = data.azurerm_resource_group.signalycz.location
  pfx_blob = acme_certificate.signalycz.certificate_p12
  password = acme_certificate.signalycz.certificate_p12_password
}

resource "azurerm_app_service_custom_hostname_binding" "signalycz" {
  hostname = "signaly.cz"
  app_service_name = "signalycz"
  resource_group_name = data.azurerm_resource_group.signalycz.name
}

resource "azurerm_app_service_certificate_binding" "signalycz" {
  hostname_binding_id = azurerm_app_service_custom_hostname_binding.signalycz.id
  certificate_id = azurerm_app_service_certificate.signalycz_cert.id
  ssl_state = "SniEnabled"
}

 

A to je pro dnešek vše :)

Zobrazeno 242×

Komentáře

Honyczek

Nevim, proc to ctu az ted, ale je to skvela zprava!

Zobrazit 1 komentář »

Pro přidání komentáře se musíš přihlásit nebo registrovat na signály.cz.

Autor blogu Grafická šablona Ondřej Válka