Podívejte se raději na online verzi přednášky, slajdy mohly být aktualizovány nebo doplněny.

Detail přednášky

SSL Labs Server Test dává alespoň trochu objektivní hodnocení webu co se týká nastavení HTTPS. Je srozumitelné i laikům, ale dosáhnout perfektního skóre již vyžaduje trochu umu. Na mojí přednášce se dozvíte, jak na to.

Datum a akce

21. června 2017, Internet a Technologie 17 (délka přednášky 25 minut, 25 slajdů, video)

Slajdy

Jak vykunit HTTP servery podle SSL Labs

#1 Pojďme se naučit, jak Qualys SSL Labs Server Test hodnotí weby a jak dosáhnout nejlepších známek, tedy A+.

nejlepsi

#2 A a A+ jsou známky, kterými by vaše weby měly být ohodnocené. A+ je nejlepší známka, je to jednička s hvězdičkou.

F jako FAIL

#3 Nejhorší známka je F. F jako FAIL nebo taky jako… však víte.

HTTPS = How To Transfer Private Shit (Stuff)

#4 Pojďme se nejdřív podívat na HTTPS. Tento protokol pomáhá bezpečně přenášet citlivá a privátní data přes veřejný Internet. Zkratka HTTPS znamená HTTP Secure, ačkoliv já si myslím, že moje alternativní zkratka protokol popisuje přesněji: How To Transfer Private Shit Stuff.

Not Secure v Chrome 62

#5 Chrome pokračuje ve svém plánu nazývat věci pravými jmény a od verze 62 bude označovat jako Not Secure všechny stránky načtené pomocí HTTP v „Incognito“ režimu. V „normálním“ režimu bude jako nezabezpečené označovat HTTP stránky, na kterých uživatel začne vyplňovat nějaké políčko. Chrome 62 by měl vyjít v říjnu.

Animace Not Secure v Chrome 62

#6 Od Chrome 62 to bude na stránkách načtených po HTTP vypadat takto. Jakmile uživatel začne něco psát, tak se objeví Not Secure. V „Incognito“ režimu bude Not Secure na všech stránkách načtených po HTTP.

Qualys SSL Labs Server Test

#7 Pojďme se podívat na otestování „kvality“ HTTPS. Asi nejznámější testy HTTPS jsou ty od SSL Labs. Můžete si nechat otestovat prohlížečserver. Dalšími online nástroji na testování HTTPS a obecně SSL/TLS jsou např. Cryptosense Discovery, SSL/TLS Server Test od High-Tech Bridge, SSL-Tools, CryptCheck a TLS Observatory od Mozilly. Pro skenování z příkazové řádky můžete využít API zmíněných služeb nebo speciální programy, např. pshtt („pushed“), testssl.sh, CipherScan nebo SSLyze.

Hodnocení A+ na SSL Labs Server Testu

#8 Takto vypadá nejlepší hodnocení A+ v SSL Labs Server Testu. Můj web je tedy (nečekaně, že) nastaven nejlépe podle aktuálních doporučení, na jedničku s hvězdičkou. V této úvodní části výsledků testu vidíte souhrn hodnocení a také jeho zdůvodnění. Důležité jsou ty zelené řádky dole, pokud by byly oranžové nebo červené, tak budou obsahovat popis problémů, které je potřeba vyřešit pro zlepšení zabezpečení přenosů dat (a známky). Jednou jsem viděl dokonce obrázek se známkou A++, ale to je jen vtípek z fotošopu. Hodnocení A++ neexistuje ani neexistovalo, na dotaz mi to potvrdil i Ivan Ristić, autor SSL Labs.

Mozilla SSL Configuration Generator

#9 „Správnou“ známku v testu získáte tak, že server správně nastavíte. Konfiguraci vytvářet ručně je ale zdlouhavé, takže je nejlepší použít nějaký generátor, například SSL Configuration Generator od Mozilly. Ten vám podle vybraného serveru a profilu (tj. „jak moc staré prohlížeče chcete podporovat“) vygeneruje správnou konfiguraci a seznam cipher suites. Popis správného nastavení je také v SSL and TLS Deployment Best Practices od SSL Labs, seznam doporučovaných cipher suites je v něm trochu kratší.

Nartac Software IIS Crypto

#10 Pro konfiguraci Microsoft Internet Information Services (IIS) můžete použít program IIS Crypto od Nartac Software. Je dostupný zdarma a popis jeho použití a nastavení najdete v návodu od SSLmarketu.

A+ na IIS

#11 Asi bych měl rovnou zmínit, že získat známku A+ na IIS je v podstatě nemožné, IIS totiž nepodporuje TLS_FALLBACK_SCSV, viz dále. Pro A+ na IIS byste museli totiž zapnout jen protokol TLS verze 1.2, čímž byste odstřihli prohlížeče, které ho neumí. Mezi takové browsery patří třeba Android 4.3 a starší a Internet Explorer 10 a starší na Windows 7. Počátkem roku 2020 majoritní prohlížeče podporu TLS 1.0 a 1.1 ukončí, takže možná můžete být napřed a tyto staré protokoly přestat podporovat již dnes.

A+: HSTS s max-age = 6 měsíců a víc, TLS_FALLBACK_SCSV, bez SHA-1

#12 Pro získání nejlepší známky A+ je potřeba, aby web posílal hlavičku Strict-Transport-Security s direktivou max-age nastavenou na 6 měsíců a víc. Tato hlavička posílaná ze serveru řekne prohlížeči, po jak dlouhou dobu má interně přesměrovávat všechny požadavky na daný web z HTTP na HTTPS, čímž efektivně zabrání tzv. downgrade útokům, které by mohl provést Man-in-the-Middle. Web také nesmí posílat certifikát, který používá algoritmus SHA-1, prohlížeče ale takové weby již nezobrazí. Pokud server používá HTTP Public Key Pinning (HPKP) např. jako ochranu proti zneužití falešných a chybně ověřených certifikátů, tak musí posílat tzv. „backup pin“ (podpora hlavičky Public-Key-Pins byla odstraněna v Chrome 72 a Firefox 72, už ji neposílejte.) Server také musí podporovat TLS Fallback Signaling Cipher Suite Value, pokud podporuje více protokolů.

Signaling Cipher Suite Value, TLS 1.2 ✔, MITM ✖, SSL 3 ✖

#13 TLS Fallback Signaling Cipher Suite Value (SCSV) zabraňuje útočníkovi v pozici Man-in-the-Middle provést downgrade spojení např. z TLS 1.2 na SSL 3. Funguje to následovně: klient (podporující např. TLS 1.2) při opakovaném spojení „starším“ protokolem (např. SSL 3) může serveru poslat informaci o tom, že se jedná o „fallback“ a pokud server také podporuje novější verzi (než např. SSL 3), tak musí do prohlížeče vrátit chybu. Pro hodnocení A+ musí server podporovat TLS_FALLBACK_SCSV pouze v případě, kdy umí více protokolů (např. TLS 1.0, TLS 1.1, TLS 1.2). Pokud server používá pouze jeden protokol, např. TLS 1.2, tak nikdy k „fallbacku“ na horší protokol dojít nemůže a server dostane známku A+ i bez podpory TLS_FALLBACK_SCSV.

A B C W T F

#14 Než si tedy vysvětlovat co jednotlivé známky aktuálně znamenají, tak je lepší se naučit odstranit problémy, které způsobují horší hodnocení a tím i zabezpečení přenášených dat. Ve zkratce: vždy se nejdříve podívejte na oranžově nebo červeně podbarvené informace na začátku hodnocení, to vás navede na správnou část výsledků. Mimochodem, známka T (jako „Trust issues“) existuje, web ji dostane ve chvíli, kdy server pošle nedůvěryhodný certifikát.

This server supports weak Diffie-Hellman (DH) key exchange parameters. Grade capped to B.

#15 Jedním z běžných problémů jsou slabé parametry pro výměnu klíčů pomocí algoritmu Diffie-Hellman (DH). Poznáte to podle hlášky This server supports weak Diffie-Hellman (DH) key exchange parameters. Situaci vyřešíte vytvořením parametrů o správné velikosti pomocí openssl dhparam -out dhparams.pem <velikost>. Velikost DH parametrů by měla být alespoň 2048 bitů.

DH 1024 bits – WEAK

#16 SSL Labs na nesprávnou velikost DH parametrů upozorní ve výpisu Cipher Suites štítkem WEAK. Velikost klíče, zmíněna na začátku u informací o certifikátu v řádku Key, je 2048 bitů, ale DH parametry nejsou dostatečně velké: DH 1024 bits.

Chrome 51 / Win 7 R – No FS

#17 Výměna šifrovacích klíčů pomocí algoritmu Diffie-Hellman zaručí bezpečnost šifrovaných dat do budoucna, klíče se totiž používají jen po krátkou dobu. Když se jich někdo zmocní, tak nebude moci dešifrovat data zaslaná v budoucnosti. Proto se někdy takovému algoritmu říká Forward Secrecy. SSL Labs Server Test sníží hodnocení, pokud se Forward Secrecy nepoužije pro tzv. referenční prohlížeče, které jsou v Handshake Simulation označeny písmenem R. Stačí použít správnou konfiguraci cipher suites a hodnocení by se mělo zlepšit. V Handshake Simulation si také můžete zkontrolovat, které prohlížeče se na web připojí a jaký algoritmus použijí.

This server accepts RC4 cipher, but only with older protocols. Grade capped to B.

#18 Důvodem pro snížení hodnocení je také použití šifry RC4. Ta se již nepovažuje za bezpečnou a SSL Labs vás na ni upozorní např. hláškou This server accepts RC4 cipher, but only with older protocols.

TLS_RSA_WITH_RC4_128_SHA (0x5) – INSECURE

#19Cipher Suites je šifra RC4 označena jako INSECURE, v tomto případě je naštěstí nabízena jen pro starší protokol TLS 1.0. Pomůže opět vygenerování správné konfigurace cipher suites.

This server's certificate chain is incomplete.

#20 Některé servery neposílají všechny certifikáty, které by měly. Prohlížeče si umí tzv. intermediate certifikáty dotáhnout díky extenzi Authority Information Access (AIA), ale neuměl to třeba Chrome na Androidu do verze 58, který web kvůli chybějícímu certifikátu vůbec nenačetl. V testu je taková situace označena chybou This server's certi­ficate chain is incomplete. Na badssl.com si můžete otestovat různé chybové stavy vašeho prohlížeče.

Chain issues: Incomplete, Extra download

#21 V informacích o certifikátech je v případě chybějícího intermediate certifikátu uvedeno Chain issues: Incomplete a ve výpisu certifikátů je chybějící certifikát označen pomocí Extra download, protože prohlížeči nepřišel ze serveru, ale musí si ho dotáhnout navíc. Aby se to nedělo, tak stačí ze serveru posílat s koncovým (leaf) certifikátem posílat i intermediate. Certifikát certifikační autority posílat potřeba není.

This server uses 64-bit block cipher (3DES / DES / RC2 / IDEA) with modern protocols. Grade capped to C.

#22 Správná konfigurace cipher suites vyřeší i tento problém, kterým je použití slabých šifer jako např. 3DES, DES, RC2 nebo IDEA.

TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) – WEAK

#23 Tento server nabízí 3DES i s moderním protokolem TLS 1.2, v části Cipher Suites je taková šifra označena jako WEAK.

B > C, our gradings will change in a month

#24 Hodnocení SSL Labs není „na pořád“ a občas se změní a zpřísní, protože se objeví nové útoky na HTTPS nebo se zvýší hrozba prolomení některých kryptografických algoritmů. Ve výsledcích Server Testu se o změně předem dozvíte, takže se můžete připravit. Plánované změny hodnocení se dozvíte na blogu SSL Labs.

A+ lednička

#25 Když může známku A+ dostat lednička, tak můžete i vy! A když už budete mít A+ v Server Testu SSL Labs, tak zkuste nejlepšího hodnocení dosáhnout i v testovači Observatory od Mozilly, ve kterém se hodnotí i jiné věci ovlivňující bezpečnost návštěvníků.

Video záznam

YouTube

Michal Špaček

Michal Špaček

Vyvíjím webové aplikace, zajímá mě jejich bezpečnost. Nebojím se o tom mluvit veřejně, hledám hranice tak, že je posouvám. Chci naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Veřejná školení

Zvu vás na následující školení, která pořádám a vedu: