Sécurisation SSL / TLS de apache

De Linux Server Wiki
Aller à la navigation Aller à la recherche


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 :

openssl dhparam 4096 -out /etc/ssl/private/dh4096.pem
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é global (pour tous les sites https géré par le serveur apache) avec la directive suivante :

SSLOpenSSLConfCmd DHParameters /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 secp521r1 > /etc/ssl/private/ecdh521r1.pem
cat /etc/ssl/private/ecdh521r1.pem >> /etc/ssl/votresite.tld.pem

pour voir la liste des courbes disponibles :

openssl ecparam -list_curves

Dès Apache 2.4.8 et OpenSSL 1.0.2, on peut dire a apache quelle courbe utiliser de manière globale par ordre de priorité et ce pour tous les sites (plus de necessité de le faire dans chaque fichier .pem) :

SSLOpenSSLConfCmd ECDHParameters Automatic
SSLOpenSSLConfCmd Curves sect571r1:secp521r1:secp384r1:prime256v1

Notez que contrairement à DH, pour ECDH on précise simplement quelle courbe utiliser et non pas un fichier.

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

HSTS, HPKP et DANE/TLSA