Správné nastavení SSL v Nginx
Nginx [engin-x] je vysose výkoný webový server, který podporuje protokol SSL (Secure Sockets Layer) zajišťující šifrovanou komunikaci včetně vzájemné autentizace klienta a serveru. SSL je sice ve výchozí konfiguraci aktivní, ovšem toto nastavení není tak optimální, jak by mohlo být. Zde je návrh, jak konfiguraci SSL v Nginx zlepšit.
Nebudu chodit kolem horké kaše. Zde je celá zmíněná konfigurace.
http {
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "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";
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/stapling_trusted.crt;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_session_cache shared:SSL:32m;
ssl_buffer_size 8k;
ssl_session_timeout 10m;
}
Pro účely vysvětlení jsou direktivy uvnitř bloku http rozděleny volnými řádky na tři bloky. V prvním bloku se definují povolené verze a zabezpečovací mechanizmy. Za zmínku zde stojí, že není povolené SSL verze 3, které je náchylné k tzv. POODLE útoku. Pozor na to, že vypsané povolené a zakázané šifrovací mechanizmy nedají vzniknout spojení s prohlížeči IE6 a IE8 na Windows XP, ale to by dnes měla být naprosto zanedbatelná menšina.
Druhý blok je o něco zajímavější. Aktivuje tzv. OCSP stapling, což je mechanizmus pro ověřování správnosti SSL certifikátu, který dovoluje ověřovat certifikát podle podepsané časové známky, čímž snižuje počet dotazů na certifikační autoritu a tím pádem zvyšuje rychlost zabezpečené komunikace. Podle Nginx dokumentace k ssl_stapling je potřeba specifikovat DNS resolver, který přeloží jméno OCSP responderu. Google dává k dispozici své DNS servery s adresami 8.8.8.8 a 8.8.4.4, ale pokud preferujete vlastního DNS servery, tak resolver jednoduše upravte.
Ve třetím bloku se nastavuje velikost bufferu a především zapíná sdílená SSL session cache, která dává potenciál pamatovat si na 10 minut až 32 x 4000 = 128000 zabezpečených spojení a tím zvýšit jejich rychlost.
Na závěr ještě jeden tip na zvýšení výkonu. Nginx dovoluje aktivovat TCP DEFER ACCEPT, což urychlí navázání TCP spojení mezi klientem a serverem. Jednoduše k direktivě listen napište slovo deferred.
server {
listen 443 deferred ssl;
}