Ako dosiahnuť hodnotenie A+ v teste SSLlabs
18.5.2015 | Jindřich Zechmeister
Dnešný návod je určený pre všetkých, ktorí si spravujú server sami a chcú mať SSL/TLS na serveri nastavené čo najlepšie. Návod sa vám bude hodiť či už dbáte na maximálnu bezpečnosť, alebo ste len súťaživí a chcete mať najvyššie hodnotenie. Test SSLlabs je uznávanou autoritou a najznámejšou SSL/TLS testom. Pravidelní čitatelia nášho Magazínu ho už veľmi dobre poznajú.
Návod je určený pre webový server Apache. Ostatné populárne webové servery budú nasledovať.
Server nám poskytol ZonerCloud - výkonné a lacné VPS servery do 55 sekúnd.
Predvolená konfigurácia nie je vhodná
Predvolená konfigurácia SSL/TLS na Debiane, ktorý používa aj Cloud server od Zoneru, je v teste SSLlabs ohodnotená známkou C. Hlavná výhrada smeruje k zapnutiu protokolu SSLv3, ktorý sa na internete už nepoužíva z bezpečnostných dôvodov.
Hlavné problémy zastaralej predvolenej konfigurácie:
- zapnuté SSLv3
- zapnutá RC4 šifra
- nepodporuje Forward Secrecy
Úpravou predvoleného nastavenia sa dostaneme na hodnotenie A a vďaka podpore HTTP Strict Transport Security aj na najvyššie hodnotenie A+.
Kroky k lepšiemu zabezpečeniu
Pre zlepšenie zabezpečenia je potrebné vyriešiť problémy spomenuté vyššie. Všeobecne platí, že parametre nastavenia môžete definovať buď pre celý server (mod_ssl), alebo pre konkrétne weby (vhosty).
Vypnutie SSLv3 protokolu
Vypnutie zastaraného SSLv3 protokolu je veľmi jednoduché. Zastaraný protokol SSLv3 môžete vypnúť buď vo všetkých vhostoch, alebo na celom serveri. Všetkým návštevníkom vášho webu bohato stačí podpora troch TLS protokolov. Staršie protokoly SSLv2 a SSLv3 sa z bezpečnostných dôvodov už nepoužívajú.
Upravte v /etc/apache2/mods-available/ssl.conf:SSLProtocol all -SSLv2 -SSLv3
Vypnutie RC4 šifry
Šifra RC4 je považovaná za problematickú, pretože je vektorom zraniteľnosti BEAST. Na serveroch sa dnes používa iba z dôvodu zachovania kompatibility s Internet Explorerom na Windows XP. Ak sa na serveri RC4 zakáže, zastarané verzie Internet Exploreru budú mať problém sa zo systému Windows XP na web pripojiť (rozhodnutie o zachovaní kompatibility je na vás, ja ho odporúčam vypnúť).
Zakázanie šifry je jednoduché. Stačí dať pred nežiaducu šifru výkričník a server ju už nebude používať. Výkričník pri skratke označuje, že sa nemá používať. Poradie šifier potom určuje poradie preferencie, ako ich má server pri handshake uprednostniť.
Upravte v /etc/apache2/mods-available/ssl.conf:SSLCipherSuite ... !RC4
Forward Secrecy
Forward Secrecy slúži na ochranu prenesených informácií pred neskorším dešifrovaním (napríklad po ukradnutí privátneho kľúča). Predpokladom pre funkčný Forward Secrecy sú dva Diffie-Hellman algoritmy pre výmenu kľúčov DHE a ECDHE. Forward Secrecy sme sa venovali v samostatnom článku Perfect Forward Secrecy - zamezte odposluchu svojho servera.
Viac o nasadení Forward Secrecy nájdete v článku SSL Labs: Deploying Forward Secrecy. Ak sa vám nechce problematika študovať, stačí nastaviť nižšie uvedené poradie šifier do konfigurácie.
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ískanie bonusového hodnotenia
Po vyššie spomínaných úpravách by mal byť váš server ohodnotený známkou A. Pre získanie dodatočného plus je potrebné nastaviť HTTP Strict Transport Security.
Nastavenie HTTP Strict Transport Security (HSTS)
HTTP Strict Transport Security (HSTS) vylepšuje bezpečnosť spojenia návštevníka so serverom, pretože nedovolí komunikovať iným protokolom, ako je HTTPS. Nedovolí útočníkovi znížiť úroveň šifrovania (downgrade útok), ani použiť nešifrované HTTP. Viac o HSTS nájdete v článku slovenskej Wikipédie HTTP Strict Transport Security.
Upravte konfiguračný súbor Apache (/etc/apache2/sites-enabled/website.conf alebo /etc/apache2/httpd.conf) a pridajte nasledujúci riadok k VirtualHostu:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomain
[...]
Predpokladom fungovania je zapnutie headers (sudo a2enmod headers). Po nastavení Apache restartujte.
Navštívte náš referenčný server
Pripravili sme pre vás stručný informačný web NajlepšíSSL. Sú na ňom uvedené vyššie spomenuté informácie a na serveri je aplikované spomenuté nastavenie. V teste SSLlabs dosahuje toto nastavenie známky A+. Môžete sa ním inšpirovať pri svojom nastavení SSL. Na webe NajlepšíSSL si môžete rovno otestovať vašu doménu pomocou SSLlabs server testu.
Možno ste si všimli, že hodnotenie sa skladá zo 4 čiastkových hodnotení jednotlivých prvkov zabezpečenia. Hodnotí sa samotný certifikát, nastavenie SSL/TLS protokolov, nastavenie (protokolu) výmeny kľúčov a sila nastavených šifier. Nebudem na tomto mieste detailne uvádzať metodiku hodnotenia, pretože ju SSLlabs popisuje v samostatnom dokumente.
Web NajlepšíSSL nedosahuje u položky Key Exchange hodnotenie 100; je to z dôvodu bugu v Apache (Bug #1219804 - Support custom DH parameter file in Apache 2.4), ktorý rieši Apache verzia 2.4 a na webe bude problém opravený po aktualizácii na novú verziu Debianu. Potom bude Apache rešpektovať vyššiu úroveň Diffie-Hellman parametru, ako súčasných 1024b.
Ďalšie funkcie spomínané overovačom SSLlabs ako TLS_FALLBACK_SCSV a Public Key Pinning (HPKP) sú výrazne pokročilejšie a nad rámec tohto článku. Pre podporu TLS_FALLBACK_SCSV stačí mať modernú verziu OpenSSL; ak váš server funkciu nepodporuje, aktualizujte balík s OpenSSL. Nastavenie HPKP nájdete v článku HTTP Public Key Pinning Extension HPKP for Apache, NGINX and Lighttpd.
Poznámka: Náš referenčný server má kvôli dosiahnutiu 100% hodnotenia veľmi agresívne nastavenú kompatibilitu s prehliadačmi. Používa napríklad iba protokol TLS 1.2, s ktorým má niekoľko zastaraných klientov problém. Referenčné nastavenie nie je príliš vhodné pre produkčný web, ktorý navštevujú aj staršie prehliadače a mobilní klienti. Problém budú mať napríklad Androidy do verzie 4.3 vrátane, Internet Explorer 6-8 a Java.
Pre rozumnú kompatibilitu je potrebné používať protokoly TLS 1.0 a TLS 1.1. Mnohí klienti (najmä mobilní) kupodivu najnovšiu verziu TLS nepodporujú. S podporou TLS 1.0 a 1.1 sa na váš server nepripojí iba IE 6 na Win XP, pretože vyžaduje podporu RC4 (TLS 1.0 je vo výchozom stave v IE 6 vypnuté).
Kompletný prehľad podpory SSL/TLS v rôznych klientoch nájdete na Wiki: Transport Layer Security