« Sécurisation SSL / TLS de apache » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
Ligne 5 : Ligne 5 :
=NB :=
=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
* 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 moins sécurisé (celui avec le plus de ciphers autorisés) au plus sécurisé (celui avec le moins de ciphers autorisés) (le moins sécurisé dans ssl.conf, le plus sécurisé dans la vhost)
* SSLCipherSuite peut lui être défini plusieurs fois à condition d'aller du moins sécurisé (celui avec le plus de ciphers autorisés) au plus sécurisé (celui avec les ciphers les plus restrictifs) (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 : <code>cat signing_ca.pem intermediate_ca.pem root_ca.pem > cachain.pem</code>
* l'ordre des autorités intermédiaires dans le fichier de chaine de certification : du plus proche du certificat au plus éloigné. En gros : <code>cat signing_ca.pem intermediate_ca.pem root_ca.pem > cachain.pem</code>



Version du 20 juin 2016 à 15:24


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 moins sécurisé (celui avec le plus de ciphers autorisés) au plus sécurisé (celui avec les ciphers les plus restrictifs) (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 secp384r1 -out /etc/ssl/private/ecdhsecp584r1.pem
cat /etc/ssl/private/ecdhsecp384r1.pem >> /etc/ssl/votresite.tld.pem

pour voir la liste des courbes disponibles :

openssl ecparam -list_curves

A l'heure ou j'écris ces lignes, chrome ne supporte que les courbes NIST P-256 et P-384 (pas P-521)

On peut aussi vérifier la courbe utilisé :

openssl ecparam -in /etc/ssl/private/ecdhsecp384r1.pem -text -noout

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 Curves sect571r1:secp521r1:secp384r1:prime256v1
SSLOpenSSLConfCmd ECDHParameters Automatic

La première directive donne la liste des courbes utilisables, la seconde défini le mode automatique qui choisira la courbe la plus solide disponible a la fois sur le client et le serveur lors de la négociation TLS.

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