IdenTrust se snadno neopouští
Od svého počátku v roce 2015 závisela důvěryhodnost certifikační autority Let's Encrypt na nadřazené autoritě IdenTrust. Ta umožnila rychlý rozjezd nového subjektu, protože mu poskytla křížově podepsaný mezilehlý certifikát. Klienti znali IdenTrust a důvěřovali tak jím vystavenému mezilehlému a následujícímu koncovému certifikátu.
Autorita si samozřejmě vytvořila i vlastní kořenové certifikáty a snažila se je dostat do všech současných operačních systémů. Postupně vznikly nové mezilehlé certifikáty a přibyla plná podpora ECDSA. Let's Encrypt stále závisel na IdenTrustu, ale rozhodl se postupně postavit na vlastní nohy a stát se nezávislým.
Ukázalo se ale, že to není úplně jednoduché, protože některé operační systémy prostě nejsou aktualizovány a uživatelé tak nový kořen nemají k dispozici. V roce 2020 se to týkalo například zhruba třetiny uživatelů Androidu, kteří používají operační systém starší než 7.1.1 z roku 2016. Původně se mělo za to, že tito uživatelé mají jednoduše smůlu a nové certifikáty už pro ně nebudou důvěryhodné, protože se s tím nedá nic dělat.
Nakonec se řešení přece jen našlo a problém byl odložen o další tři roky. Zjistilo se totiž, že Android nekontroluje platnost u vestavěných kořenových certifikátů. Byl tedy vydán nový křížově podepsaný mezilehlý certifikát, který bylo možné dále používat, přestože v průběhu jeho platnosti skončila platnost nadřazeného kořene. Mezilehlý certifikát se používá, protože má platnost do září 2024.
Definitivní konec
Blíží se tedy další fáze odchodu od partnerství s IdenTrust a po tomto odříznutí pověstné pupeční šňůry už tedy bude Let's Encrypt odkázán na svůj certifikát ISRG Root X1. Ten se už v řetězci důvěry používá řadu let a není s ním žádný problém. Ovšem doposud existovala i alternativní cesta od certifikátu IdenTrust (DST Root CA X3), který je k dispozici ve starých systémech.
Jak postupně vytikává platnost kořenů a mezilehlých certifikátů, připravují se také dlouhodobé plány na změny. O tom současném jsme psali už v červenci loňského roku. To zásadní je, že Let's Encrypt zkrátil svůj řetězec důvěry a vynechal křížově podepsané mezilehlé certifikáty. Pokud je potřebujete, můžete si požádat o původní komplikovanější cestu využitelnou u starších klientů.
Tohle je ale samozřejmě jen dočasný stav, který je omezen dobou platnosti zmíněných nových křížově podepsaných mezilehlých certifikátů. Ty skončí 30. září letošního roku, takže už 90 dnů předtím (ve skutečnosti ještě trochu dříve) přestanou být v této cestě vystavovány nové koncové certifikáty. Platnost posledního vydaného tak bude zhruba korespondovat s koncem platnosti jemu nadřazeného mezilehlého certifikátu.
Konec této možnosti nastane už velmi brzy, konkrétně ve čtvrtek 6. června. V tento den proběhne výměna mezilehlých certifikátů a zároveň bude odstraněn křížový podpis z DST Root CA X3. Let's Encrypt tak také začne vydávat koncové certifikáty ECDSA z výchozího řetězce důvěry, který obsahuje pouze jeden mezilehlý certifikát ECDSA. Tím bude odstraněn druhý mezilehlý certifikát a zároveň možnost vydávat certifikát koncové entity ECDSA z mezilehlého RSA. Stejná změna proběhne 24. dubna 2024 i v testovacím (staging) prostředí Let's Encrypt.
Výsledný stav je k vidění na následujícím diagramu. Aktuální stav najdete vždy v dokumentaci Let's Encrypt.
Většina uživatelů Let's Encrypt nebude muset v reakci na tuto změnu podniknout žádné kroky, protože plnohodnotní klienti ACME automaticky stáhnou a použijí nové mezilehlé certifikáty při obnově koncových certifikátů. Koncová služba tak prostě začne v jednu chvíli posílat nový certifikát a zároveň s ním také aktuálně platný mezilehlý prvek, který potvrzuje důvěryhodnost.
Nové mezilehlé certifikáty
Jak už bylo zmíněno, budou zároveň vyměněny mezilehlé certifikáty. Ty byly vygenerovány v březnu a mají označení R10 až R14 pro RSA a E5 až E9 pro ECDSA. Všechny certifikáty tak budou vystavovány s výchozím řetězcem: kořenový certifikát ISRG X1 → mezilehlý RSA nebo ECDSA → koncový certifikát.
Všechny vydané certifikáty, bez ohledu volbu RSA nebo ECDSA, budou mít právě jeden mezilehlý certifikát, který je přímo podepsaný kořenem ISRG X1. To je kořen samostatné autority Let's Encrypt.
Nové mezilehlé certifikáty ECDSA budou mít ještě alternativní řetězec ke kořenovému certifikátu ISRG X2: kořenový certifikát ISRG X2 → mezilehlý ECDSA → koncový certifikát. Pokud tento alternativní řetězec potřebujete, musíte o něj autoritu explicitně požádat pomocí API. Jeho výhodou je, že je výrazně menší, protože používá výhradně cestu složenou z ECDSA. Většina uživatelů ho ovšem nepotřebuje. Pro výše popsaný řetězec RSA nebudou k dispozici žádné alternativní řetězce.
Je třeba mít na paměti, že bude současně aktivních více mezilehlých certifikátů RSA a dva aktivní mezilehlé certifikáty ECDSA. Koncový certifikát RSA může být podepsán kterýmkoliv z aktivních mezilehlých RSA s názvem R10 až R14, koncový certifikát ECDSA pak může být podepsán kterýmkoli z aktivních mezilehlých ECDSA s názvem E5 až E9. Plnohodnotný klient ACME by to měl opět zvládnout poskládat automaticky.
Platnost mezilehlých certifikátů autorit vyprší každých několik let a je třeba je průběžně měnit, stejně jako se pravidelně obnovuje třeba certifikát webové stránky. Do budoucna má Let's Encrypt v úmyslu každoročně měnit používané mezilehlé certifikáty, což pomůže zvýšit celkovou bezpečnost certifikátů.
Mezilehlé ECDSA
Pokud si v současné době požádáte o koncový certifikát používající ECDSA, dostanete certifikát podepsaný pomocí mezilehlých certifikátů RSA. Pokud si to nepřejete, máte možnost požádat o vystavení na základě mezilehlých certifikátů ECDSA. To se brzy také změní a nebude potřeba o tuto variantu žádat, ale půjde o výchozí stav.
Dříve výchozí řetězec ECDSA obsahoval dva mezilehlé certifikáty: E1 i křížově podepsaný kořenový certifikát ISRG X2. Tedy: kořenový certifikát ISRG X1 → kořenový certifikát ISRG X2 → E1 → koncový certifikát. Po připravované změně bude obsahovat pouze jediný mezilehlý certifikát: jeden z nových mezilehlých certifikátů ECDSA, který bude křížově podepsaný kořenem ISRG X1. Nový stav tedy bude: ISRG Root X1 → E5 → koncový certifikát. Tím bude zajištěno, že všechny mezilehlé certifikáty (jak RSA, tak ECDSA) budou podepsány přímo důvěryhodným kořenem ISRG X1.
Takové zkrácení cesty bude přínosná pro většinu uživatelů, protože vyžaduje přenést méně dat při navazování spojení pomocí TLS. U některých starších zařízení mohou uživatelé narazit na problémy s kompatibilitou a pak by měli přejít na RSA. Známý je například problém v Androidu 7.0, který brání pracovat s většinou certifikátů eliptických křivek (EC). Tato verze systému Android ale už stejně nedůvěřuje kořenu ISRG X1, takže je s Let's Encrypt nekompatibilní.
Pozor na pinování
Jak už bylo řečeno, běžní plnohodnotní klienti ACME nebudou mít se všemi těmito změnami žádný problém. Skrze API si totiž mohou požádat nejen o vystavení nového koncového certifikátu, ale také o předání všech potřebných mezilehlých certifikátů vytvářejících důvěryhodnou cestu.
Výsledkem obnovování certifikátu by tak vždy měl být celý řetězech (fullchain), který se pak předává uživateli. V takovém případě nemůže dojít k rozpadu řetězce důvěry, pokud autorita neudělá nějakou chybu a bude vždy posílat správnou kombinaci certifikátů. Problém může nastat jen v případě, kdy používáte nějakého hodně jednoduchého nebo vlastního klienta, který si mezilehlé prvky nestahuje, ale má ho staticky uložený a přidává ho do řetězce sám. Tam ale selhává automatizace a správce musí hlídat podobné změny a upravovat konfiguraci ručně.
Ze stejných důvodů se nedoporučuje také nijak pinovat (připichovat) či jinak pevně nastavovat mezilehlé certifikáty nebo kořeny. To umožňuje například protokol DANE v záznamech typu TLSA, které se dají dobře používat v prostředí elektronické pošty. Pokud si ale takto zapinujete mezilehlý nebo kořenový certifikát, můžete mít po jakékoliv změně nepříjemný problém. Je proto vhodnější pinovat vlastní veřejný klíč, který se obvykle při obnově koncového certifikátu nemění.