Magazín o bezpečnosti

Magazín o SSL certifikátech a certifikačních autoritách pro Vás píší odbornící z SSLmarketu.

Jak dosáhnout A+ hodnocení v testu SSLlabs

(22. 4. 2015, aktualizováno) 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 nevyšší 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.

Vysoce výkonné virtuální servery

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:

<VirtualHost _default_:443>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomain

[...]</VirtualHost>

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.

výsledek testu nejlepsissl.eu

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

Ing. Jindřich Zechmeister
Specialista pro bezpečnostní SSL certifikáty
Certifikovaný Symantec Sales Expert Plus 
e-mail: jindrich.zechmeister(at)zoner.cz

Pole s hvězdičkou * jsou povinná.

Přidat komentář

Přehled komentářů

  • SHA-1 certifikáty

    23. 4. 2015 17:14:37 | Michal Špaček

    Díky za článek. Stálo by za to zmínit SHA-1 certifikáty, s nimi momentálně A+ také nelze dosáhnout (protože SHA-1 certifikáty vygenerují varování a s jakýmkoliv varováním A+ dosáhnout nelze.), je třeba mít certifikát s SHA-2. Co se týká poslední věty a IE6, tak ten se na web pouze s TLS nepřipojí, protože standardně TLS 1.0 neumí, je potřeba to zapnout. Když je server jen na TLS a má povolenou RC4, tak se na něj standardně nastavené IE6 také nepřipojí.

    Doplnil bych hezký generátor konfigurace od Mozilly, https://mozilla.github.io/server-side-tls/ssl-config-generator/

    A upozornil bych na překlep u HSTS - includeSubDomain$ ten dolar na konci má být s a uvozovka.

    Odpovědět

  • Webserver

    23. 4. 2015 19:40:27 | Marek Fajkus

    Ja bych zase uvital alespon v uvodnim textu zminku, ze jde o konfiguraci SSL pro Apache webserver. Je sice nejrozsirenejsi, ale zdaleka ne jediny. Takto to vyzniva, ze jde o konfiguraci SSL/TSL, coz je zavadejici. Jde o konfiguraci SSL/TSL podpory pro Apache. Nebo jeste lepsi variantou by bylo vedle Konfiguraci Apache pridat i Konfiguraci jinych webserveru. Napriklad NGINX si urcite zminku zaslouzi.

    Odpovědět

  • Konfigurace nginx

    24. 4. 2015 0:38:35 | Michal Špaček

    Pokud by někoho zajímala konfigurace nginxu, tak ji popsal Filip Procházka na https://filip-prochazka.com/blog/nginx-https-spdy-hsts-security nebo se dá vykoumat z toho již zmíněného generátoru od Mozilly https://mozilla.github.io/server-side-tls/ssl-config-generator/

    Odpovědět

  • reakce

    24. 4. 2015 11:00:41 | Zechmeister

    Dobrý den, zmínku o Apachi doplním a časem doplním i další platformy.

    Děkuji za připomínky, které zapracuji.

    Odpovědět