Jak jsme nasazovali Let’s Encrypt na stovky domén a jak řešíme automatickou obnovu certifikátů

Z důvodu zvýšení bezpečnosti a částečně i kvůli tlaku ze strany prohlížečů jsme v Livesportu zaváděli protokol HTTPS pro stovky domén. S tím přímo souvisí i certifikáty, které je třeba nějakým způsobem získávat, obnovovat a distribuovat. Potřebovali jsme proto vyřešit, jak se bezpečně a pokud možno automatizovaně starat o stovky certifikátů.

Livesport
Livesport
Sep 17 · 5 min read

V minulosti jsme používali RapidSSL, ale měli jsme s ním řadu problémů. Certifikáty vyžadovaly manuální nákupy, automatizace jejich obnovy byla komplikovaná a co víc, přišly problémy s důvěryhodností a ve finále i rušení důvěry v prohlížečích.

Certifikační autorita Let’s Encrypt nás zaujala už v době, kdy vznikla (především díky bezproblémové automatizaci), proto jsme průběžně sledovali její vývoj. Po zavedení podpory wildcard certifikátů (březen 2018) padla poslední překážka a pustili jsme se do plného nasazení certifikátů od Let’s Encrypt na naše projekty.

Autorita vydává certifikáty zdarma, díky tomu odpadly náklady a finanční agenda spojená s pořizováním certifikátů (faktury, platební karty a podobně). S tím souvisí i rozhodnutí stát se jejím sponzorem.

Pro získávání a obnovu certifikátů u Let’s Encrypt používáme nástroj Certbot, který s CA komunikuje pomocí protokolu ACME (Certbot tak může sloužit i pro jiné CA, které tento protokol podporují). Jedno ze specifik wildcard certifikátů spočívá v tom, že je možné jej v Let’s Encrypt ověřit pouze skrze DNS. U nás DNS spravujeme centrálně a k tomuto účelu proto využíváme NS delegaci konkrétního DNS záznamu (_acme-challenge) na server, kde samotné získání a obnova certifikátů probíhá. Certbot do delegované zóny přidává TXT záznamy, na jejichž základě dojde k ověření validity požadavku. Celá komunikace s CA běží přes API, které Let’s Encrypt provozuje.

Neplatnost není hrozbou

Pro nasazení certifikátů využíváme vlastní sadu skriptů, které komunikují s bezpečným úložištěm a zajišťují distribuci certifikátů na cílové servery. Jako bezpečné úložiště certifikátů používáme software Vault od společnosti HashiCorp, konkrétně open source variantu.

O Vaultu jsme se dozvěděli přibližně před dvěma lety, kdy jsme stavěli nové firemní sídlo a potřebovali úložiště pro Wi-Fi certifikáty a podobně. Tehdy jsme si však vyvinuli úložiště postavené na easy-rsa a vlastním API serveru. Řešení fungovalo, ale příliš se nehodilo pro distribuci certifikátů třetí strany a pro otevření úložiště, které by mělo mimo jiné sloužit i vývoji a využití v cloudu.

Loni jsme na jedné konferenci znovu narazili na Vault a po otestování jsme se rozhodli pro jeho nasazení, protože vyhověl našim požadavkům kladeným na tento typ úložiště (bezpečnost, autentizace, autorizace, distribuce, redundance).

Vault má řadu předností. Nedůvěřuje backendu a data šifruje v reálném čase a vše, co se z aplikace zapisuje na úložný backend, je tedy šifrované. Vault podporuje celou řadu možností pro uložení dat, např. různé SQL i jiné databáze, Etcd, cloudové úložiště a další. My jsme zpočátku, především pro jednoduchost, zvolili prosté uložení do souborů. V současnosti už provozujeme řešení s vysokou dostupností (HA), kde jsme pro tento účel jako backend zvolili Consul Cluster (taktéž produkt od HashiCorp).

Zdroj: https://learn.hashicorp.com/vault/operations/ops-vault-ha-consul

Díky Vaultu můžeme certifikáty bezpečně distribuovat jak v rámci naší interní infrastruktury, tak i mimo ní a četnost využití stále narůstá. Servery či aplikace v cloudu si z Vaultu stahují konkrétní certifikáty, které ke své činnosti potřebují.

Vault a Puppet v symbióze

V době před globálním zaváděním HTTPS jsme měli certifikátů mnohem méně a s pomocí Puppetu jsme je kompletně nahrávali na všechny naše servery. Takové řešení zvyšovalo rizika při kompromitaci — případný útočník by z jediného serveru získal všechny naše certifikáty, přitom drtivá většina serverů žádný certifikát nepotřebovala. Zároveň jsme nebyli schopni certifikáty automatizovaně dostat mimo naši infrastrukturu.

S distribucí certifikátů v rámci naší infrastruktury nám i nadále pomáhá Puppet. Na servery distribuujeme konfiguraci toho, kde má jaký certifikát být. O životní cyklus certifikátu na serveru se následně starají skripty, které řeší získání certifikátu z Vaultu, obnovu (pokud dojde k obnově v úložišti) a jeho promazání, pokud se už nemá na serveru dále vyskytovat.

V případě, že na serveru nemá být žádný certifikát, Puppet pročistí i celý ekosystém kolem správy a obnovy na serveru tak, aby na něm neležely potenciálně citlivé informace.

Samostatnou kapitolou je distribuce mimo naši infrastrukturu. Například pro Kubernetes využíváme Secrets-Manager od Tuenti. Pro týmy, které clustery spravují, jsme připravili jednoduchý návod pro použití a ukázkový deployment z GitLabu. Obvykle pak stačí jen udržovat seznam certifikátů, které v daném clusteru potřebují mít.

Získávání certifikátu od Let’s Encrypt pro novou doménu vypadá zhruba následovně:

  • nastavení DNS
  • vygenerování certifikátu a jeho upload do Vaultu
  • přidání certifikátu do nastavení v Puppetu (distribuce na konkrétní server/skupinu serverů)
  • následná obnova certifikátu je již plně automatizovaná

Veškeré aktivity spojené se získáváním a obnovou certifikátů zajišťuje náš technický tým, který má kromě toho na starosti především správu on-prem serverů, clusterů a s tím spojené infrastruktury. Zprostředkování certifikátů se pro nás stalo službou, kterou poskytujeme i ostatním týmům. Každý, kdo potřebuje, má ve Vaultu vždy připravené aktuální certifikáty, o které se nemusí starat. Vault využíváme kromě úložiště také jako certifikační autoritu pro další aplikace, protože umožňuje vystavovat certifikáty přes API a tím pádem je možné využít i certifikáty s krátkodobou platností (např. 30 minut).


Zaujalo tě, co v Livesportu děláme? Přidej se k nám!

Livesport Dev

Od vývojářů pro vývojáře.

Livesport

Written by

Livesport

Livesport Dev

Od vývojářů pro vývojáře.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade