SSL certifikát pro webové aplikace v Azure App Service zdarma
Tento článek byl napsán v roce 2018. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.
Nejpoužívanější prohlížeč webových stránek, Google Chrome, bude od července upozorňovat na webové stránky běžící na HTTP jako nezabezpečené. HTTP se pomalu stává standardem a pomocí automatizační služby Let's Encrypt a stejnojmenného doplňku pro Azure App Service můžete získat SSL certifikát zdarma. V tomto článku popíšu, jak na to.
Let's Encrypt
Se službou Let's Encrypt jsem se seznámil teprve nedávno. Do té toby jsem používal certifikáty od DigiCert, které jsem měl zdarma jako Microsoft MVP. Let's Encrypt je otevřená certifikační autorita a služba provozována skupinou ISRG, která je zároveň neziskovou organizací. Členy této skupiny jsou například lidé z Akamai, Michigenské Univerzity, Mozilla, CISCO a z řad technologických expertů.
Služba je plně automatizovaná a zdarma. Právě automatizace je největším benefitem. S využitím protokolu ACME, pro který existuje mnoho klientů lze napsat software, který se vám postará o vydávání a obnovu certifikátů jednou provždy. A právě tady vstupuje na scénu doplněk Let's Encrypt pro Azure službu App Service, který přesně tyto rutiny udělá za vás.
Vytvoření servisního účtu - App Registration
V pozdějších krocích budeme nastavovat doplněk Let's Encrypt, který bude potřebovat sahat na mnoho míst v našem Azure účtu. Aby tak mohl učinit, bude potřebovat servisní účet s patřičnými právy. Ten tedy založíme v tomto prvním kroku. Pod účtem správce se přesuneme do služby Azure Active Directory a následně do sekce App Registrations.
Dále je to snadné. Zvolíme možnost New application registration a dále vyplníme jednoduchý formulář. URL není pro náš scénář podstatná.
Naše nová Registered App má důležite Application ID, které později budeme potřebovat. Potřebovat budeme také heslo, který si vytvoříme přes možnost Settings a následně Keys.
Pod záložkou Keys je možné vytvářet jednak hesla (to nás zajímá) a druhak tzv. veřejné klíče (to nás nezajímá). Po uložení se automaticky vygeneruje heslo, které si poznamenáme. Poté už k němu nebudeme mít přístup a bude sloužit jen pro ověřování.
Přidělení práv pro Registered App
Dalším krokem bude přidělení práv vytvořené Registered App. Podle dokumentace je potřeba přidělit naší Registered app roli Contributor pro Resource Group AppService plánu a pro App Service. Práva se přidělují vždy na stránce dané služby pod položkou Access Control (IAM), který slouží i pro nastavování práv k resources uživatelům.
Pokud vám práva nebudou v dalších krocích fungovat, přesvědčte se, že skutečně nastavujete práva jak pro App Service tak pro App Service plán a to na úrovni Resource Group.
Azure Let's Encrypt
Máme vše přichystáno a nezbývá tedy než nainstalovat doplněk Azure Let's Encrypt. Nejpohodlnější místo pro instalaci doplňků je webové rozhraní Kudu. Adresa je https://{app-service-name}.scm.azurewebsites.net. V horním menu zvolíme Site extensions a dále záložku Gallery. V doplňcích je možné vyhledávat a narazíte hned na dvě varianty této extension:
Varianta klasická obsahuje Web Job, který se automaticky postará o prodlužování certifikátu zhruba 14 dní před vypršením. Druhá varianta (No Web Jobs) už tuto rutinu neobsahuje a tudíž se o prodlužování platnosti musíte postarat sami. V případě varianty Web Jobs se vám může snadno stát, že si při deploymentu nové verze aplikace Web Job odstraníte. Samotný doplněk má i další omezení, která je vhodné si ověřit.
Instalace doplňku
Pro instalaci doplňku stačí odkliknout ikonku plus u jedné z voleb doplňku Let's Encrypt. Následně budete muset pravděpodobně provést restart App Service. Je to možné přímo na stejné stránce pomocí tlačítka Restart site. Konečně pak můžeme kliknout na tlačítko šipky (launch), čímž se dostaneme na stránku doplňku.
Dále se dočkáme asi nejkomplikovanější stránky. Je to sice jen jednoduchý formulář, nicméně objevují se zde názvy položek, které se neshodují s tím, co jsme dělali v předchozích krocích. Na stránce je nicméně všechno vysvětleno, takže formulář by neměl být problém vyplnit.
- Tenant: je název, který vidíte u své directory, například firma.onmicrosoft.com
- SubscriptionId: najdete například v sekci Subscriptions
- ClientId: je ve skutečnosti Application ID z Registered App
- ClientSecret: je ve skutečnosti Password ze sekce Keys v Registered App
- ResourceGroupName: název RG, kde běží App Service
- ServicePlanResourceName: název RG, kde běží App Service plán
- UpdateApplicationSettings: true (chceme tento formulář propsat do nastavení aplikace)
Po uložení se propíše toto nastavení do Application Settings a následně dojde opět k restartu App Service. Není tedy špatný nápad nechat si tyto kroky mimo provozní špičku aplikace.
Vygenerování certifikátů
Máme skoro hotovo. Na další stránce můžeme zkontrolovat všechny hostnames dané App Service a pomocí tlačítka Next se dostaneme na stránku, kde je možné spustit automatizovaný proces, který:
- zažádá o certifikát pro dané domény / subdomény
- nechá službu let's encrypt ověřit domény provoláním endpointů
- vygeneruje certifikáty a uloží je k app service
- nastaví ssl binding nových ssl certifikátů
Tento krok by měl trvat delší dobu a může selhat na dvou bodech. Prvním jsou nedostatečná práva pro Registered App (viz. předchozí kroky) a nebo nemožnost ověření pravosti domény. Chybová hláška by vás v takovém případě měla navést správným směrem.
Závěrečná konfigurace
Teď už by vaše App Service měla podporovat HTTPS a mít validní certifikát od Let's Encrypt. Ten má aktuálně platnost 3 měsíce, nicméně je možné, že časem se délka platnosti bude zkracovat. O obnovu se bude starat buď zmíněný Web Job a nebo tak budete muset učinit včas na místě, kde jsme generovali certifikáty.
Posledním krokem, který doporučuji je převést všechen traffic z HTTP verze na HTTPS. Lze to udělat jedním kliknutím v nastavení App Service na záložce SSL settings. Na této záložce je možné si rovnou ověřit přítomnost certifikátu a jeho platnost.
Pokud je vše úspěšně nastaveno, měl by fungovat automatický redirect na HTTPS verzi a ta by měla mít nastaven SSL certifikát. Pěkně je to vidět například ve Firefoxu:
Co na to říkáte? Celkem hračka ne?