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, 2019 · 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

Výhodou obnovy certifikátů je značný předstih. Pokud dojde k chybě, dozvíme se to včas a můžeme případný problém řešit. Díky velké rezervě nás tím pádem neohrožují ani případné kratší výpadky na straně CA nebo v naší infrastruktuře. Ty by musely trvat déle než 25 dnů, aby se projevily problémy pozorovatelné navenek (neplatnost certifikátů). Do budoucna chceme rozvíjet redundanci, která zatím nebyla vzhledem k výše uvedenému prioritou.

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

Vysokou úroveň zabezpečení garantuje Vault i z pohledu autentizace a autorizace. Není problém nastavit jednotlivým autoritám různou úroveň přístupu a oprávnění. Pak je např. možné s jednou konkrétní identitou získat pouze konkrétní sadu certifikátů. I u těch je nutné znát název objektu, protože nastavení oprávnění pro danou identitu neumožňuje vylistování objektů, ke kterým má identita povolený přístup.

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.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store