Let's Encrypt: jak funguje a co nabídne

Zdroj: ROOT.CZ

Veřejné spuštění certifikační autority Let's Encrypt se blíží. Brzy by měla nabídnout zdarma všem automaticky generované certifikáty. Mnoho uživatelů a organizací si od tohoto přístupu slibuje masivní rozšíření HTTPS do všech koutů webu. Jak přesně Let's Encrypt funguje a co umí protokol ACME?

Pokud se má HTTPS rozšířit na další weby, nesmí být jeho nasazování plné překážek a nesmí být zpoplatněno. To si alespoň řekla Electronic Frontier Foundation (EFF) a založila Let's Encrypt, která má velmi brzy nabídnout certifikáty všem, zdarma a bez ruční práce. Pro provozovatele vlastních serverů to nebude znamenat víc než nainstalovat a spustit jednu utilitu. Uživatelé web hostingů to budou mít zřejmě ještě jednodušší: hosteři o Let's Encrypt dobře vědí a plánují jej integrovat. Na letošních LinuxDays se objevila přednáška Ondřeje Caletky nabízející pohled do zákulisí služby.

Organizace EFF se bezpečností a šifrováním zabývá velmi dlouho. Před lety založila SSL observatory a proscanovala celý internet a zjistila, jaké certifikáty vrací servery na portu 443. Odhalili například, že existuje asi tisícovka důvěryhodných autorit a například také to, že existuje důvěryhodný certifikát vystavený na 192.168.1.2. Takových přešlapů byla nalezena celá řada.

V té době nebylo šifrování vůbec běžné, velké servery ho používaly jen pro přihlašování, ale zbytek webu byl přenášen v otevřené podobě. Sice vám nikdo neukradl heslo, ale mohl vám ukrást cookie a převzít celou session. EFF začala tlačit na velké společnosti, aby začaly nabízet HTTPS na svých webech všude. Myslím si, že HTTPS by skutečně mělo být všude, protože jen tak zajistíte autenticitu dat. Jinak vám kdokoliv může podstrčit po cestě do stránky libovolná data. Nestojí to za to.

Konfigurace TLS není ničím triviálním, protože je potřeba vygenerovat klíče, správně migrovat z HTTP a vše správně nakonfigurovat. Navíc vám certifikát za rok vyprší a za tu dobu vše zapomenete a musíte se to učit znovu. To je pro mnoho správců příliš náročné, takže se nechtějí ničím podobným zabývat a raději HTTPS nenasadí. Je potřeba také předělat webové stránky, aby nedocházelo k míchání šifrovaných a nešifrovaných odkazů. Pak se obsah po HTTP nenačte. Tento problém dokáže v moderních prohlížečích vyřešit nová hlavička Content-Security-Policy: upgrade-insecure-requests, která prohlížeči řekne, aby automaticky v adresách před načítáním změnil http:// na  https://.

Pro eliminaci všech zmíněných problémů vznikl projekt Let's Encrypt, který je společnou aktivitou organizací EFF, Mozilla, University of Michigan. Je paradoxní, že aby se vyřešil problém s mnoha autoritami, založí se nová. Ale jejich cílem je založit jednu a ukázat všem, jak to dělat pořádně.Let's Encrypt se skládá ze tří částí: automatická certifikační autorita boulder, komunikační protokol ACME a utilita letsencrypt. Utilita zajistí, že se vše podaří zjednodušit na jedno spuštění.

Samotná autorita bude vydávat jen DV certifikáty, tedy certifikáty pouze ověřující držení doménového jména. Vše bude automatické, nízkonákladové a zcela transparentní. Software je napsán v jazyce Go a zdrojové kódy jsou dostupné na GitHubu. Všechny žádosti i vystavené certifikáty budou číslované v nepřerušované řadě a budou zveřejněné. Každý si bude moci ověřit, jaké certifikáty byly vydány a že je vše správně.

Popis: http://i.iinfo.cz/images/455/linuxdays-2015-nedele-19-prev.jpg

Během vydávání certifikátu je potřeba ověřit držení domény, což je možné provést buď vystavením souboru na určené cestě na webovém serveru, konfigurací DNS nebo vystavením certifikátu na určené jméno (DVSNI). Let's Encrypt kontroluje, zda už doména nemá vystavený certifikát od jiné autority. Pokud ano, musíte dokázat, že k němu držíte privátní klíč. Tímto způsobem je systém automaticky zabezpečen proti vydání falešného certifikátu i v případě, kdy se útočník například zmocní IP adres oběti a je tak schopen provést validaci bez vědomí oběti.

Platnost certifikátu od Let's Encrypt bude jen tři měsíce. Systém bude umožňovat získání certifikátu na více doménových jmen (Multi-SAN). Přinejmenším zpočátku nebudou vydávány tzv. wildcard certifikáty. Dříve bylo vystavení certifikátu tak složité, že si správci pořídili jeden wildcard certifikát a ten používali všude.Podle Caletky vlastně většina uživatelů ani wildcard nepotřebuje a pokud je instalace plně automatická a zdarma, není to vůbec potřeba. Pokud přidáte subdoménu, stačí spustit utilitu, pětkrát bouchnete do enteru a máte nový certifikát s přidanou subdoménou. Revokace certifikátu bude dostupná také jednoduše automaticky a zdarma.

Pro automatizaci získávání certifikátů byl vyvinut protokol ACME (Automated Certificate Management Environment), kterým klienti žádající o certifikát komunikují se servery (autoritami) pomocí JSON nad HTTPS. Server se autentizuje pomocí TLS, klient používá JOSE (JSON Object Signing and Encryption) a proti opakování požadavků se používá HTTP hlavička Replay-Nonce. Tu přidává server do komunikace a klient musí její obsah poslat zpátky v každém požadavku. Každý takový identifikátor je možné použít samozřejmě jen jednou.

Popis: http://i.iinfo.cz/images/485/princip-acme-komunikace-prev.png

Protokol ACME používá HTTP metody GET a POST. Většina funkcí používá POST, protože v těle požadavku je třeba autentizovat klienta. Metoda GET se používá pouze pro získání informací, které jsou veřejné. Nejprve si klient vytvoří účet, pomocí kterého ho autorita identifikuje. Jde o veřejný a privátní klíč, kterým bude klient podepisovat všechny ACME požadavky. Během registrace může klient volitelně také vyplnit další kontaktní údaje jako e-mailovou adresu a telefon.

S vytvořeným účtem klient požádá o validaci doménového jména, pro které má zájem vystavit certifikát. Autorita požadavek analyzuje a vytvoří validační objekt. Ten obsahuje seznam úkolů, které je potřeba splnit, aby byla validace úspěšná. Když klient některý úkol splní, oznámí to autoritě, která splnění prověří a na základě toho upraví validační objekt. Protokol zde umožňuje, aby si autorita vymýšlela nové a nové výzvy, dokud nebude zcela spokojena.

Pro validaci se používá nově vyvinutá metoda DVSNI, která vtipně používá rozšíření SNI pro volbu certifikátu ze serveru. Autorita vytvoří náhodný token, klient vytvoří odpověď a SHA-256 otisk této odpovědi. Poté se vygeneruje self-signed certifikát na jméno <otisk>.acme.invalid a server se nakonfiguruje tak, aby jej vracel při dotazu na toto speciální doménové jmeno. Autorita se pak zkusí na váš server připojit, SNI hlavičkou během TLS handshake požádá speciální doménové jméno a testuje, jaký dostane certifikát. Pokud je certifikát vystavený na toto speciální jméno, je výzva úspěšně splněna. Výhoda této metody je především v jednoduchosti automatizace. Konfigurační utilita nemusí složitě analyzovat konfiguraci websereveru, stačí když bude umět na serveru nakonfigurovat nový SSL VirtualHost.

Po splnění validace klient vygeneruje standardní CSR žádost o certifkát, kterou opět podepíše klíčem svého účtu a pošle autoritě. Ta zkontroluje, zda klient drží platné validace pro všechna požadovaná doménová jména a pokud ano, vrátí klientovi URL, na které bude certifikát vystaven. Protokol dokonce umožňuje, aby autorita jednou vystavený certifikát automaticky obnovovala bez přičinění klienta. Klient tedy musí jen jednou za čas znovu stáhnout svůj aktuální certifikát z dané URL.

Všechny tyto (a další) kroky ale udělá automatická utilita letsencrypt, která je určená ke spuštění na webovém serveru, který chce získat certifikát. Napsaná je v jazyce Python 2.7 a stará se o kompletní správu životního cyklu TLS certifikátu. Celý protokol ACME je otevřený, takže je možné, že na něj časem některé komerční autority přejdou, takže stejnou utilitu bude možné použít i s jinými autoritami. Utilita má modulární architekturu a je zatím připravena pro konfiguraci serverů Apache httpd a Nginx. Kromě samotné konfigurace zavede i bezpečné TLS volby a volitelně umožňuje například nastavit přesměrování z HTTP na HTTPS.

Utilita umožňuje i manuální získání certifikátu, ale celý proces je poměrně komplikovaný a má celou řadu kroků. Buď je nutné na krátký okamžik zastavit webový server tak, aby utilita mohla provést validaci domény, nebo je nutné vystavit správný soubor se správným MIME typem na správné cestě webového serveru. Pak se vám ale nevyplatí vůbec Let's Encrypt nasazovat, můžete si koupit levný DV certifikát u komerční autority a budete to mít jednodušší. Cílem Let's Encrypt není vytvářet další běžnou autoritu, těch je na světě dostatek. Automatizace by měla být tou hlavní přidanou hodnotou, která umožní plošné nasazování HTTPS, uzavírá přednášku Ondřej Caletka.