Miroslav Holec
Premium

Nachytalo mě HSTS v Dotnet News

Miroslav Holec   28. listopadu 2020

Tento článek byl napsán v roce 2020. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Zhruba dva roky posílám vývojářům zpravodaj Dotnet News, kde informuji o novinkách, zajímavostech a vlastních i komunitních akcích. Vystřídal jsem řadu systémů pro zasílání zpráv a stále nenašel ten správný. V poslední rozesílce jsem ke všemu některým odběratelům trochu zavařil kvůli nastavení security. Pojďme se mrknout v čem je problém a jak se z mé chyby poučit.

HSTS

Pro pochopení problému je nejprve nutné chápat bezpečnostní mechanismus HSTS. V dnešní době je pro většinu webových stránek základním předpokladem použití HTTPS. Ne, že by to dávalo všude smysl, ale už jsme zkrátka ve stavu, kdy těch zbytečných případů je minimum a tudíž se HTTPS stává standardem a počítá se s ním. Mechanismus HSTS funguje tak, že webová aplikace pošle do browseru HTTP hlavičky, kterými si od browseru vynucuje HTTPS připojení. Browser si nastavení pro doménu uloží a po definovanou dobu případný pokus o HTTP request aktivně nahradí HTTPS požadavkem. Podrobnosti defninuje od roku 2012 RFC 6797 a Microsoft pro podporu tohoto RFC přidal do ASP.NET Core frameworku middleware HSTS, který potřebné HTTP hlavičky umí vrátit. Aby vše fungovalo, dané HTTP hlavičky jsou přijaty jen za předpokladu HTTPS připojení. Jinými slovy poprvé musí proběhnout redirect na HTTPS a pak teprve browser bude HSTS hlavičky respektovat. Je-li platnost hlaviček alespoň 1 rok, lze navíc uložit nastavení na preload servery, ze kterých si některé browsery nastavení stáhnou ještě před zahájením komunikace.

Trackování v newsletteru

Doteď všechno dobré. Mechanismus HSTS jsem měl zapnutý dlouhodobě pro celou doménu miroslavholec.cz. V rámci experimentování s novou doručovací službou (Ecomail) jsem chtěl zvýšit doručitelnost a použít vlastní trackovací odkazy. Trackování odkazů mi umožňuje spočítat doručitelnost a analyzovat obsah, který uživatele (ne)zajímá. Ve skutečnosti už trackování řešit nechci, nicméně v rámci testování nové služby jsem chtěl porovnat výsledky oproti jiným nástrojům. V rámci trackování jsem tedy zapojil vlastní bounce doménu (t.dotnetnews.miroslavholec.cz), pro kterou poskytovatel bohužel neumožňuje navěsit SSL certifikát. Pro tento jednorázový experiment jsem se rozhodl HTTPS oželet a proto jsem vypnul HSTS mechanismus pro zmíněnou bounce doménu.

A teď konečně jádro pudla. Když pomineme cílené snížení důvěryhodnosti komunikace, nachytal jsem se na klasický problém, který ovlivnil funkčnost newsletteru. Nastavení HSTS je totiž dlouhodobě cachované a jeho samotná změna u řady odběratelů nebyla zaznamenána. S rozesílkou jsem totiž spěchal, abych mohl vyzkoušet novou službu v rámci trial verze. Zkrátka HSTS hlavičky nestihly expirovat a browser některých odběratelů automaticky vynutil HTTPS komunikaci. A ta samozřejmě selhala, protože pro HTTPS nebyl nastaven certifikát.

Ponaučení

Typická lenost umocněná potřebou mít to hned hotové. Možná i trochu frustrace ze všech služeb pro rozesílku mailů. Řeším to již 2 roky, spálil jsem nad tím desítky hodin a pokaždé zjistím, že zkoušená služba má nějakou nevýhodu, přes kterou nejede vlak. MailChimp, MailerLite, SendGrid, vlastní SMTP i Ecomail. Pro dobrou mailing službu šel bych světa kraj.

Inu příště nesednout na lep a důsledněji dodržovat vlastní zásady zabezpečení. Nechat zapnuté HSTS jako standard a když poskytovatel nepodporuje certifikáty, jít raději o dům dál. Vlastní nastavení HSTS si můžete ověřit například na stránce gf.dev/hsts-test.

Článek s poděkováním věnuji vývojářům, kteří mě na chybu v tracklinkách upozornili.