Duben 2014. Heartbleed bug otřásl celým internetem. Dva roky stará zranitelnost v OpenSSL umožňovala číst paměť serverů — včetně privátních klíčů a session tokenů. Pokud vás tohle neprobudilo k revizi SSL/TLS konfigurace, nic už vás neprobudí.
Stav SSL/TLS v roce 2014¶
Podívejme se na realitu: většina českých webů stále běží na HTTP. Ti, kteří mají HTTPS, často používají zastaralé protokoly a slabé cipher suites. SSL 3.0 je stále zapnutý. RC4 je „doporučená” alternativa k BEAST útoku. A self-signed certifikáty v interních systémech jsou norma.
Tohle se musí změnit. Heartbleed byl budíček. Ale problém je hlubší — špatná konfigurace TLS je všudypřítomná a většina administrátorů se spokojí s defaultním nastavením, které je často děravé.
Krok 1: Vypněte SSL 3.0 a starší¶
SSL 2.0 je mrtvý už roky. SSL 3.0 by měl být taky — je zranitelný vůči POODLE útoku (ten přijde v říjnu 2014, ale chytří admini ho vypnou už teď). Minimální protokol by měl být TLS 1.0, ideálně TLS 1.2 pro moderní klienty.
# Nginx — doporučená TLS konfigurace 2014
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:!RC4:!MD5:!PSK';
# DH parametry — generujte vlastní!
ssl_dhparam /etc/nginx/dhparam.pem; # openssl dhparam -out dhparam.pem 2048
Krok 2: Cipher suites — pořadí matters¶
Správné pořadí cipher suites je kritické. Server by měl preferovat:
- ECDHE cipher suites — poskytují Forward Secrecy (PFS). I když útočník získá privátní klíč, nemůže dešifrovat minulou komunikaci.
- AES-GCM — authenticated encryption, rychlé na moderním hardware s AES-NI instrukcemi
- SHA-256+ — SHA-1 je na cestě ven, Chrome ho začne označovat jako nebezpečný
Co zakázat: RC4 (bias útoky), MD5 (kolize), EXPORT ciphers (40-bit, pozůstatek z 90. let), NULL ciphers (žádné šifrování) a DES/3DES (pomalé, slabé).
Krok 3: HSTS — vynuťte HTTPS¶
HTTP Strict Transport Security říká prohlížeči: „Nikdy se na tento web nepřipojuj přes HTTP.” Jednoduchá hlavička, dramatický dopad na bezpečnost. Eliminuje SSL stripping útoky.
# HSTS hlavička — Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Pozor: HSTS je jednosměrka. Jakmile ho zapnete s dlouhým max-age, prohlížeče budou odmítat HTTP po dobu platnosti. Začněte s krátkým max-age (3600) a postupně zvyšujte.
Krok 4: Certifikáty — dělejte to správně¶
Po Heartbleedu je nutné přegenerovat všechny certifikáty a privátní klíče. Ne jen obnovit — nový klíčový pár. Starý mohl být kompromitován.
- RSA 2048-bit minimum — 1024-bit je nedostatečné, NIST doporučuje 2048+ od roku 2014
- SHA-256 podpis — SHA-1 certifikáty budou prohlížeči penalizovány od 2015
- Celý řetězec — servírujte intermediate certifikáty, ne jen leaf
- OCSP Stapling — server sám ověřuje platnost certifikátu, rychlejší než CRL
# OCSP Stapling — Nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
Krok 5: Testujte, testujte, testujte¶
Konfigurace bez testování je zbytečná. Používejte tyto nástroje:
- SSL Labs Server Test (ssllabs.com) — cílte na rating A+
- testssl.sh — offline testování z příkazové řádky
- nmap –script ssl-enum-ciphers — rychlý audit cipher suites
- openssl s_client — manuální debug TLS handshake
Naše interní pravidlo: žádný server nejde do produkce bez SSL Labs ratingu A. Po Heartbleedu jsme přeauditovali všech 47 produkčních serverů. 31 z nich mělo rating B nebo horší. Za dva týdny byly všechny na A.
Forward Secrecy — proč na tom záleží¶
Perfect Forward Secrecy (PFS) zajišťuje, že kompromitace privátního klíče nezpřístupní historickou komunikaci. Každá session používá unikátní ephemeral klíč. To je klíčové zejména po Heartbleedu — pokud NSA nebo kdokoliv jiný zachytil šifrovaný provoz a později získal klíč, bez PFS může dešifrovat vše zpětně.
ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) je dnes preferovaný způsob. Je rychlejší než DHE a poskytuje stejnou úroveň bezpečnosti s kratšími klíči. Ujistěte se, že vaše cipher suites začínají ECDHE.
Časté chyby, které vidíme¶
Při auditech SSL/TLS konfigurace u českých firem narážíme opakovaně na stejné problémy:
- Defaultní DH parametry (1024-bit) — generujte vlastní 2048-bit
- Mixed content — HTTPS stránka načítá HTTP zdroje, prohlížeč zobrazí varování
- Chybějící redirect HTTP → HTTPS — uživatel přistoupí přes HTTP a zůstane tam
- Wildcard certifikát na veřejně přístupných subdoménách — kompromitace jedné = kompromitace všech
- Interní systémy bez TLS — „je to přece za firewallem” (není)
SSL/TLS není volitelné¶
Heartbleed byl varování. POODLE přijde za pár měsíců. A Google právě oznámil, že HTTPS bude ranking signál. Správná TLS konfigurace není luxus — je to základ. Projděte si tento checklist, otestujte své servery a opravte, co je potřeba. Dnes, ne zítra.