Jak získat A+ v SSL Labs Server Testu
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

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

#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.

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

#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.

#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.

#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.

#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č i 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.

#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.

#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ší.

#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.

#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.

#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ů.

#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
.

#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.

#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ů.

#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
.

#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í.

#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.

#19 V Cipher 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.

#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 certificate chain is incomplete. Na badssl.com si můžete otestovat různé chybové stavy vašeho prohlížeče.

#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í.

#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.

#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
.

#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.

#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ů.