Když na váš server nastavíte SSL certifikát, tak začnete chránit návštěvníky proti odposlechu. SSL certifikát je však pouze nástroj zabezpečení a je na vás, jak dobře ho budete používat.
Pro vysokou míru bezpečnosti a stav, kdy bude certifikát využit účelně a web bude skutečně bezpečný, je třeba provést několik nastavení. Výchozí nastavení serveru není dostatečně bezpečné a je nutné ho upravit.
Jako referenci pro správnost nastavení použijeme největší autoritu v této oblasti, kterou je Qualys a test SSL Labs. Je vytvořen odborníky a v současnosti nejuznávanějším nástrojem pro kontrolu nastavení SSL certifikátu na serveru.
Tato výchozí konfigurace, kterou používá Debian, je pouze na známku C:
Pojďme tedy tyto nedostatky napravit.
Vypnutí SSLv3 se provede v nastavení ssl.conf pro celý server:
Editujte /etc/apache2/mods-available/ssl.conf a přidejte položku SSLProtocol all -SSLv2 -SSLv3.
Vypnutí RC4 šifry provedete připsáním vykřičníku do seznamu šifer tamtéž:
SSLCipherSuite ... !RC4
Forward Secrecy zabraňuje kompromitaci komunikace, i kdyby útočník získal privátní klíč později. Díky Diffie-Hellmanově výměně klíčů je komunikace nerozluštitelná i v budoucnu. Předpokladem pro funkční Forward Secrecy jsou dva Diffie-Hellman algoritmy pro výměnu klíčů DHE a ECDHE .
Forward Secrecy zapnete tak, že zapnete řazení šifer a sady šifer s DH dáte dopředu (upřednostníte jejich použití zařazením na začátek).
Editujte opět /etc/apache2/mods-available/ssl.conf :
SSLHonorCipherOrder on
SSLCipherSuite "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK"
Tím jsou hlavní problémy napraveny . Můžete však v nastavení pokračovat dále.
Pro silné zabezpečení potřebujete vygenerovat tzv. Parametry pro DH výměnu klíčů. Silné DH parametry jsou mimo jiné řešení zranitelnosti zvané Logjam.
Generování DH parametrů proveďte v Openssl:
openssl dhparam -rand – 4096
Výsledek bude chvíli trvat (zvýšená zátěž serveru) a bude vypadat takto (obsah souboru dhparam):
-----BEGIN DH PARAMETERS-----
MMIICCAKCAgEA9yJdHbC89LRTPVSAT1Lmik4SNed0z2uUiW86rFQ5dNl7J5O5t8kY
MOMpTwCSyHAUyGJEhpJ29HCVX1LRd1Ue5L7jFuGUinrumYPagDBMsUCb/XPIV2RT/
M9iRzc29Vo/8+UGpVkuD2cptp5qGLSDJr2L0kyNaGvFVdA5kLZ2b2fmUt2DtNAnWl
MWx6HaMU8rhgnu5g8NbORn0KgSaAretHOJGfIfrJ4rDQrMGoVfHl6caRfB28Wrjq7
MXzcZhY2X1AuyONmrDTdtgpfPyJ5/TuaLGt8t2oCmL166DvVhU2xpFh7aGdNq+7YV
MVPkuT4XqoNOaffKL6MT9h8z28yKpwzA8gwRaQAuajdBdoyFvZ9Yo7HbH1FdjBfpx
MEraAkJvVZ4LOOA2NlfcBcapz14rmJ9J+wTjjlbHJv4jibsDu96W5jiKhdFogEoid
MBlI1YCzZah7+Yet8eHNuxgCH4hziU0iMLeN+zuMnn8QpIYBd6ncuogAQjByE+7Ms
M+gTKSum6F6svkeL3h0G3M9r3wZRRmAkVopl0j+qRPfqjkVyd60oIaGdhD/xN3xm6
MU4DGQVnA9/lYPbalbV4UuXbZp6GEIWOkLZKSMlJijgFrXC6P8mV0mNslZG87r21H
MwmqC3o0ubxKjSYjQGrO4e7RZo3x61qDI16WefV3Ouq6Z07F2GYKLhyMCAQI=
-----END DH PARAMETERS-----
Tyto DH parametry uložte na konec souboru s certifikátem, který je ve složce /etc/ssl/domena.cz/certifikat.pem. Provedete to například příkazem cat /cesta/dhparam >> /etc/ssl/domena.cz/certifikat.pem.
Apache ve verzi 2.4 a vyšší je začne automaticky používat, což se projeví ve vyšší bezpečnosti výměny klíčů a zamezí zneužití zranitelnosti Logjam.
Bezpečnost použití certifikátu a hodnocení v testu SSLlabs můžete ještě zvýšit použitím HTTP Strict Transport Security (HSTS).
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.
HSTS jednoduše řečeno znamená. že se na webu se používá pouze protokol HTTPS a nikoliv už nezabezpečené HTTP.
Upravte konfigurační soubor Apache (/etc/apache2/sites-enabled/website.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.
Po nastavení HSTS je nutné web přesměrovat na HTTPS. Toho můžete dosáhnout pomocí přesměrování:
<VirtualHost *:80>
[...]
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
nebo pomocí modrewrite
<VirtualHost *:80>
[...]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
</VirtualHost>
Nakonec proveďte reload Apache.
Pro aktuální doporučení ohledně použití SSL certifikátu doporučujeme sledovat Magazín SSLmarketu věnovaný této problematice na blog.sslmarket.cz.