Renforcer la sécurité du protocole HTTPS sur Nginx (SSL/TLS)

1/52/53/54/55/5 (5 votes, moyenne: 4,00 sur 5)
Loading...
R

Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.


Bonjour à tous,

 

J’ai un poil bidouillé le serveur Nginx pour obtenir le Graal de la note A+ sur le test Qualys SSL.

sslreporttap
Admirez

 

Pour avoir ce résultat, ça ne vous demandera pas trop de travail (vu que j’ai déjà tout fait) donc c’est plutôt sympa 🙂

 

Configuration des paramètres DHE :

Nous sommes en 2015, j’utilise la dernière version security d’OpenSSL sur Debian 8 avec Nginx 1.8 et force est de constater que les paramètres par défaut de OpenSSL utilisent toujours des clés de 1024 bits.

Le problème, c’est que tous les certificats utilisent du SHA256 + 2048 bits maintenant et que les clés de 1024 bits seront automatiquement considérées comme faibles par le test de Qualys.

Pour mettre fin à cette hérésie, connectez vous en root et lancez la commande suivante :

cd /etc/ssl/certs && openssl dhparam -out dhparam.pem 2048

 

Configuration de Nginx :

Ouvrez le fichier de configuration principal de Nginx avec la commande suivante :

nano /etc/nginx/nginx.conf

 

Vous devriez trouver une section qui ressemble à ceci dans la balise http :

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers xxxxxxxxxxxxxxxxxxx;

##
# Logging Settings
##

 

Remplacez-la par ceci :

##
# SSL Settings
##

ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4';
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains";

##
# Logging Settings
##

 

Et pour les explications (parce que c’est toujours sympa de comprendre ce que l’on fait), cadeau !

  • La ligne ssl_prefer_server_ciphers indique que le serveur doit utiliser ses suites de chiffrements et non celle données par le navigateur du client.
  • La ligne ssl_protocols indique les protocoles activés sur le serveur. Ici, toutes les versions de TLS.
  • La ligne ssl_dhparam indique le chemin vers la configuration de OpenSSL. Nous utilisons maintenant des clés de 2048 bits.
  • La ligne ssl_ciphers indique la suite de ciphers que le serveur doit utiliser ainsi que ceux qu’il refuse explicitement.
  • Pour la dernière ligne, add_header Strict-Transport-Security j’en ai déjà parlé ici 🙂

 

Redémarrez Nginx et testez votre site 🙂

service nginx restart

ou

systemctl restart nginx

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

Subscribe
Notify of
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

3 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
Loscillo
Loscillo
8 années plus tôt

Bon tutoriel pour améliorer la protection de son site web.

Cependant, même si on génère ici un groupe Diffie-Hellman de 2048 bits, je pense qu’il vaut mieux passer sur des courbes elliptiques (ECDHE). DHE à des faiblesses (comme Logjam) et ECDHE est bien supporté désormais (sauf Android 2.3.7, IE sur XP et Java 6 si on regarde le test de SSL Labs).

De plus, sur le tutoriel pour mettre un certificat SSL sous nginx, vous utilisiez des ciphers avec ECDSA avec une clé RSA, ce qui est inutile, il est donc possible de simplifier cette partie 🙂

Qwaser
8 années plus tôt

Honnêtement je ne regrette pas de te suivre ! Toujours un plaisir de voir comment je peux améliorer mon serveur 😀 Ton tutoriel fonctionne impeccable, je suis maintenant moi aussi en A+ : https://www.ssllabs.com/ssltest/analyze.html?d=qwaser.fr