Miroslav Holec
Premium

SSL certifikát pro webové aplikace v Azure App Service zdarma

Miroslav Holec   16. července 2018

Tento článek je již zastaralý. Článek 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.

Azure Active Directory a 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á.

Vytvoření App Registration

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.

Application ID a nastavení

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í.

Vytvoření hesla pro App Registration

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.

Nastavení práv pro Registered App

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:

Doplněk pro App Service

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.

Instalace extension

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ý:

  1. zažádá o certifikát pro dané domény / subdomény
  2. nechá službu let's encrypt ověřit domény provoláním endpointů
  3. vygeneruje certifikáty a uloží je k app service
  4. 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.

Odklonění trafficu z HTTP na HTTPS

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:

Ukazka aktivniho certifikatu na domene

Co na to říkáte? Celkem hračka ne?