Sécurisation SSL / TLS de apache
NB :
- il semblerait que sslprotocol ne puisse pas être défini dans une vhost (pour être exact, seul le premier sslprotocol lu par apache est pris en compte. Le mieux est de le définir dans /etc/apache2/mods-enabled/ssl.conf
- SSLCipherSuite peut lui être défini plusieurs fois à condition d'aller du plus sécurisé au moins sécuriser (le moins sécurisé dans ssl.conf, le plus sécurisé dans la vhost)
- l'ordre des autorités intermédiaires dans le fichier de chaine de certification : du plus proche du certificat au plus éloigné. En gros :
cat signing_ca.pem intermediate_ca.pem root_ca.pem > cachain.pem
DH et ECDH
DH
Par défaut, apache utilise les paramètres DH définis dans la RFC 3526 en utilisant une taille de paramètre de la même taille que la clé privé utilisé par le site qui est sécurisé.
vous pouvez cependant forcer un paramètre dh personnalisé pour chaque site https en ajoutant le paramètre DH après le certificat ssl défini par la directive SSLCertificateFile
:
cat /etc/ssl/private/dh4096.pem >> /etc/ssl/votresite.tld.pem
A partir de apache 2.4.8 et openssl 1.0.2, on peut définir un paramètre dh personnalisé (pour tous les sites https géré par le serveur apache) avec la directive suivante :
SSLOpenSSLConfCmd DHParameters /etc/ssl/private/dh4096.pem
Génération d'un paramètre de 4096bits :
openssl dhparam 4096 -out /etc/ssl/private/dh4096.pem
ECDH
Par défaut, apache utilise ECC 256 bits quelque soit la taille de la clé rsa utilisé.
Vous pouvez cependant forcer l'utilisation d'une courne ECC plus grande en l'ajoutant après le certificat ssl défini par la directive SSLCertificateFile
(il faudra donc le faire pour chaque site que vous sécurisez en ssl ...) :
openssl ecparam -name sect571r1 > /etc/ssl/private/ecdh571r1.pem cat /etc/ssl/private/ecdh571r1.pem >> /etc/ssl/votresite.tld.pem
Dès Apache 2.4.16 et OpenSSL 1.0.2, on peut dire a apache quel courbe utiliser par ordre de priorité et ce pour tous les sites (plus de necessité de le faire dans chaque fichier .pem) :
SSLOpenSSLConfCmd Curves sect571r1:secp521r1:secp384r1
SSLCipherSuite
Non vulnérable a l'attaque RC4, mais vulnérable a BEAST
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 !RC4 !EXPORT"
non vulnérable a BEAST, vulnérable a l'attaque RC4
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 !EXPORT"
Configuration recommandée pour une sécurité maximum
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 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
Accessoirement, mozilla a publié | un guide ainsi qu'un | générateur de configuration plutôt efficace.
tests
openssl s_client -connect yoursite.tld:443 -ssl3 openssl s_client -connect yoursite.tld:443 -tls1 openssl s_client -connect yoursite.tld:443 -tls1_1 openssl s_client -connect yoursite.tld:443 -tls1_2 nmap --script ssl-cert,ssl-enum-ciphers -p 443,465,993,995 yoursite.tld