Dnes nám jeden zákazník začal hlásit, že se mu místo webu začala zobrazovat chyba ERR_ECH_FALLBACK_CERTIFICATE_INVALID při pokusu o přístup z prohlížeče Chrome.
Nastavení webu
Na webu máme kvůli velmi silným volumetrickým útokům, které jsou nad limity naší konektivity, nasazený Cloudflare. Primární web jde přes Cloudflare proxy, vybrané subdomény jsou nasměrované bez jejich proxy.
Příklad:
Uvedenou chybu vidí uživatelé při přístup k subdoméně, u které používáme přímý přístup.
Chyba souvisí s aktuálně nasazovaným Encrypted Client Hello
Encrypted Client Hello (ECH)
Při navazování TLS spojení se serverem je potřeba, aby se klient se serverem domluvili na způsobu šifrování komunikace. Vybrat tedy společnou šifrovací funkci a domluvit se na klíčích, které se budou používat. K tomu, aby server mohl vrátit správný certifikát ale potřebuje znát název domény, která se ale posílá až v HTTP hlavičkách. To už je ale TLS spojení navázáno. Proto vznikl protokol SNI, který zajistí předání požadovaného názvu domény ještě před navázáním TLS spojení.
Tento název je ale předáván nešifrovaně, takže když někdo sleduje komunikaci mezi klientem a serverem, tak vidí adresu serveru, se kterým komunikujete, ale i název domény, na které se klient ptá.
K zašifrování názvu dotazované domény slouží protokol Encrypted Client Hello.
Ten funguje tak, že u domény v DNS záznamech je veden veřejný klíč (HTTPS-RR), kterým klient zašifruje název domény a pošle jej serveru. Server má u sebe privátní klíč, kterým získá původně dotazovanou doménu.
Kontrola, že má doména aktivovaný ECH
$ dig -t type65 +short NAZEV_DOMENY
\# 136 0001000001000602683302683200040008BC726009BC726109000500 470045FE0D0041BE002000208B2813FDEB413575F637E5815BA2C1DC ....
Co se tedy stalo v našem případě?
Cloudflare automaticky nasadil tuto technologii na své servery a automaticky doménám vytvořil nový DNS záznam, který říká, že se má použít ECH. Klient tedy posílá název domény při navazování TLS spojení šifrovaně.
Cloudflare na svých serverech zná privátní klíč. Domény, které využívají cloudflare proxy tedy fungují v pořádku.
Při přístupu k subdoménám, které mají cloudflare proxy vypnutou, ale klient stále zasílá název domény šifrovaně. Servery však neznají privátní klíče a nedokáží informaci dešifrovat.
Jak se dá tato situace řešit?
Protože z cloudflare privátní klíče nedostaneme, tak se bohužel musí nastavit, aby šel všechen provoz přes Cloudflare servery.
U placených programů se dá ECH vypnout v detailu domény: SSL/TLS -> Edge Certificates -> Encrypted ClientHello (ECH).
Závěr
Cloudflare je silná technologická firma a jsou nám velkým zdrojem inspirace. I přestože se snažili zvýšit zabezpečení spojení, tak tento krok se jim úplně nepovedl.
Věříme, že se nasazení dalo udělat méně destruktivně. Přecijen mají dostatek informací o stavu DNS zóny každé domény a informace z DNS serverů, které záznamy jsou reálně dotazované. Celé nasazení se tak dalo udělat plynuleji a bez tohoto incidentu.