Škálovatelné nasazení Let's Encrypt

Posted 22. 11. 2015 / By Petr Soukup / Bezpečnost

Let's Encrypt je nová certifikační autorita nabízející HTTPS zdarma a s jednoduchým nasazením. Jednoduché ale jen pokud máte jednoduchý web - například při škálovaném webu je paradoxně nasazení mnohem komplikovanější než už klasických autorit. Pokud ovšem nepoužijete trik!

Jednoduchá varianta

Cílem Let's Encrypt je maximálně automatizovat nasazení. Pokud máte jednoduchý web na VPS, tak můžete mít v provozu HTTPS zavoláním jednoho příkazu - ověření domény i nasazení certifikátu. Jak to funguje?

Zní to složitě, ale z vašeho pohledu je to jeden příkaz a celé to proběhne asi za 5 sekund. Certifikát pak má platnost jen 3 měsíce, ale díky automatizaci není problém vystavovat nový třeba každý měsíc.

Škálovatelný web

Problém nastavá, pokud nemáte jednoduchý web. Například my jsme v cloudu a jedna doména tak běží paralelně třeba z 10ti serverů. Ty se navíc různě vypínají a zapínají, domény ještě různě sdílí certifikáty atd.

Při klasickém postupu by to znamenalo přepnout se do manuálního režimu, nechat si vygenerovat ověřovací klíče, ty rozkopírovat na servery a rychle spustit ověření, než se zapne nová instance. To nezní moc automaticky.

Naštěstí ale lze udělat trik. V konfiguraci všech domén (nginx) přidám tyto řádky:

    location ~ /\.well-known/acme-challenge/ {
        proxy_pass http://letsencrypt.simplia.cz:8081;        
    }

Díky tomuto jednoduchému pravidlu je každý požadavek na ověření přeposlán na jeden server, kde běží Let's Encrypt aplikace. Ta navíc ani nemusí běžet pořád. Stačí třeba jednou denně spustit a vygenerovat potřebné certifikáty.

Pro spouštění mimochodem doporučuji použít Docker - ušetříte si spoustu starostí s řešením Python závislostí. Aplikace navíc nekoliduje s vaším normálním webserverem.

docker run -it --rm -p 8081:80 --name letsencrypt \
 -v "/etc/letsencrypt:/etc/letsencrypt"              \
 -v "/var/lib/letsencrypt:/var/lib/letsencrypt"   \
 quay.io/letsencrypt/letsencrypt:latest 
 --agree-dev-preview \
 --standalone-supported-challenges http-01 \
 --server  https://acme-v01.api.letsencrypt.org/directory \
 -a standalone certonly
 \ -d www.souki.cz -d souki.cz

Certifikát bude následně uložen do složky /var/lib/letsencrypt a už je potřeba jen vyřešit jeho deploy na jednotlivé servery. My to třeba řešíme přes Puppet (viz dřívější článek).

Pozor na kompatibilitu

V teorii to funguje hezky, ale v praxi to bohužel zatím použít nejde. Let's Encrypt totiž aktuálně nefunguje na Windows XP v IE ani ve Chrome a u nás má bohužel XP ještě znatelný podíl. Také se mi ho nepodařilo zprovoznit na Android 2.3, ale to jsem prý jediný :)

Zatím je ale Let's Encrypt pořád ještě v betě, tak to třeba vyřeší. Zatím to ale pro seriózní produkci bohužel není.



O blogu
Blog o provozování eshopů a technologickém zázemí.
Aktuálně řeším hlavně cloud, bezpečnost a optimalizaci rychlosti.

Rozjíždím službu pro propojení eshopů s dodavateli.