Jak dosáhnout A+ hodnocení v testu SSLlabs
18. 5. 2015 | Jindřich Zechmeister
Dnešní návod je určen pro všechny, kteří si spravují server sami a chtějí mít SSL/TLS na serveru nastaveno co nejlépe. Návod se vám bude hodit ať už dbáte na maximální bezpečnost, nebo jste jen soutěživí a chcete mít nejvyšší hodnocení. Test SSLlabs je uznávanou autoritou a nejznámější SSL/TLS testem. Pravidelní čtenáři našeho Magazínu už ho velice dobře znají.
Návod je určen pro webový server Apache. Ostatní populární webové servery budou následovat.
Server nám poskytl ZonerCloud - výkonné a levné VPS servery do 55 sekund.
Výchozí konfigurace není vhodná
Výchozí konfigurace SSL/TLS na Debianu, který používá i Cloud server od Zoneru, je v testu SSLlabs ohodnocen známkou C. Hlavní výhrada směřuje k zapnutí protokolu SSLv3, který se na internetu už nepoužívá z bezpečnostních důvodů.
Hlavní problémy zastaralé výchozí konfigurace:
- zapnuté SSLv3
- zapnutá RC4 šifra
- nepodporuje Forward Secrecy
Úpravou výchozího nastavení se dostaneme na hodnocení A a díky podpoře HTTP Strict Transport Security i na nejvyšší hodnocení A+.
Kroky k lepšímu zabezpečení
Pro zlepšení zabezpečení je potřeba vyřešit problémy zmíněné výše. Obecně platí, že parametry nastavení můžete nastavit buď pro celý server (mod_ssl), nebo pro konkrétní weby (vhosty).
Vypnutí SSLv3 protokolu
Vypnutí zastaralého SSLv3 protokolu je velice jednoduché. Zastaralý protokol SSLv3 můžete vypnout buď u všech vhostů, nebo na celém serveru. Všem návštěvníkům vašeho webu bohatě stačí podpora tří TLS protokolů. Starší protokoly SSLv2 a SSLv3 se z bezpečnostních důvodů už nepoužívají.
Upravte v /etc/apache2/mods-available/ssl.conf:SSLProtocol all -SSLv2 -SSLv3
Vypnutí RC4 šifry
Šifra RC4 je považovaná za problematickou, protože je vektorem zranitelnosti BEAST. Na serverech se dnes používá pouze z důvodu zachování kompatibility s Internet Explorerem na Windows XP. Pokud se na serveru RC4 zakáže, budou mít zastaralé verze Internet Exploreru problém se ze systému Windows XP na web připojit (rozhodnutí o zachování kompatibility je na vás, já ho doporučuji vypnout).
Zakázání šifry je jednoduché. Stačí dát před nežádoucí šifru vykřičník a server už ji nebude používat. Vykřičník u zkratky značí, že se nemá používat. Pořadí šifer pak udává pořadí preference, jak je má server při handshake upřednostnit.
Upravte v /etc/apache2/mods-available/ssl.conf:SSLCipherSuite ... !RC4
Forward Secrecy
Forward Secrecy slouží k ochraně přenesených informací před pozdějším dešifrováním (například po ukradení privátního klíče). Předpokladem pro funkční Forward Secrecy jsou dva Diffie-Hellman algoritmy pro výměnu klíčů DHE a ECDHE. Forward Secrecy jsme se dříve věnovali v samostatném článku Perfect Forward Secrecy - zamezte odposlechu svého serveru.
Více o nasazení Forward Secrecy najdete v článku SSL Labs: Deploying Forward Secrecy. Pokud se vám nechce problematika studovat, stačí nastavit níže uvedené pořadí šifer do konfigurace.
Upravte v /etc/apache2/mods-available/ssl.conf:
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
Získání bonusového plus
Po výše zmíněných úpravách by měl být váš server ohodnocen známkou A. Pro získání dodatečného plus je potřeba nastavit HTTP Strict Transport Security.
Nastavení HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS) vylepšuje bezpečnost návštěvníkova spojení se serverem, protože nedovolí komunikovat jiným protokolem, než je HTTPS. Nedovolí útočníkovi snížit úroveň šifrování (downgrade útok), ani použít nešifrované HTTP. Více o HSTS najdete v článku české Wikipedie HTTP Strict Transport Security.
Upravte konfigurační soubor Apache (/etc/apache2/sites-enabled/website.conf nebo /etc/apache2/httpd.conf) a přidejte následující řádek k VirtualHostu:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomain
[...]
Předpokladem fungování je zapnutí headers (sudo a2enmod headers). Po nastavení Apache restartujte.
Navštivte náš referenční server
Připravili jsme pro vás stručný informativní web NejlepšíSSL. Jsou na něm uvedeny výše zmíněné informace a na serveru je aplikováno zmíněné nastavení. V testu SSLlabs dosahuje toto nastavení známky A+. Můžete se jím inspirovat při svém nastavení SSL. Na webu NejlepšíSSL si můžete rovnou otestovat vaši doménu pomocí SSLlabs server test.
Možná jste si všimli, že hodnocení se skládá ze 4 dílčích hodnocení jednotlivých prvků zabezpečení. Hodnotí se samotný certifikát, nastavení SSL/TLS protokolů, nastavení (protokolu) výměny klíčů a síla nastavených šifer. Nebudu na tomto místě detailně uvádět metodiku hodnocení, protože ji SSLlabs popisuje v samostatném dokumentu.
Web NejlepšíSSL nedosahuje u položky Key Exchange hodnocení 100; je to z důvodu bugu v Apachi (Bug #1219804 - Support custom DH parameter file in apache 2.4), který řeší Apache verze 2.4 a na webu bude problém opraven po aktualizaci na novou verzi Debianu. Pak bude Apache respektovat vyšší úroveň Diffie-Hellman parametru, než současných 1024b.
Další funkce zmiňované ověřovačem SSLlabs jako TLS_FALLBACK_SCSV a Public Key Pinning (HPKP) jsou výrazně pokročilejší a nad rámec tohoto článku. Pro podporu TLS_FALLBACK_SCSV stačí mít moderní verzi OpenSSL; pokud váš server funkci nepodporuje, updatujte balík s OpenSSL. Nastavení HPKP najdete v článku HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd.
Poznámka: Náš referenční server má kvůli dosažení 100% hodnocení velmi agresivně nastavenu kompatibilitu s prohlížeči. Používá například pouze protokol TLS 1.2, se kterým má několik zastaralých klientů problém. Referenční nastavení není příliš vhodné pro produkční web, který navštěvují i starší prohlížeče a mobilní klienti. Problém budou mít například Androidy do verze 4.3 včetně, Internet Explorer 6-8 a Java.
Pro rozumnou kompatibilitu je potřeba používat protokoly TLS 1.0 a TLS 1.1. Mnozí klienti (zejména mobilní) kupodivu nejnovější verzi TLS nepodporují. S podporou TLS 1.0 a 1.1 se na váš server nepřipojí pouze IE 6 na Win XP, protože vyžaduje podporu RC4 (TLS 1.0 je ve výchozím stavu v IE 6 vypnuto).
Kompletní přehled podpory SSL/TLS v různých klientech najdete na Wiki: Transport Layer Security
Specialista pro bezpečnostní SSL certifikáty
DigiCert TLS/SSL Professional
e-mail: jindrich.zechmeister(at)zoner.cz