Yunohost, Let’s Encrypt, A+ au SSLLabs

Prérequis pour comprendre cet article :Connaitre Let’s Encrypt, le principe de SSL/TLS, savoir mettre en place la configuration de Let’s Encrypt.

J’ai suivi le tutoriel How to : Install Let’s Encrypt certificates, pas à pas. Ca marche, le certificat est mis en place et permet d’avoir une connexion sécurisée de qualité.

Toutefois, comme je cherche à avoir la configuration TLS (pour les connexions HTTPS) la meilleure possible, j’ai testé l’adresse de mon nom de domaine (et des sous-domaine associé) sur le site https://www.ssllabs.com/. Par défaut la configuration est bonne et correct mais ne donne qu’une note de B comme résultat. Ce qui est confirmé avec une extension comme Calomel SSL qui montre que la configuration n’est pas optimum/la plus élevée.

Attention : plus la note est élevée, plus la configuration est stricte et rend incompatible l’accès avec les anciennes versions des navigateurs (d’ordinateur ou d’OS mobile).

N’accédant à ce cloud personnel que par un navigateur récent, Firefox, quelque soit mon appareil (PC ou smartphone), ce n’est pas un soucis et mon but est donc d’obtenir la meilleur note possible.

Par défaut la configuration est bonne mais donne donc un B comme résultat. J’ai donc regardé ce que m’indiquait le résultat du test du SSLLabs, j’ai consulté différents tutoriaux sur comment sécuriser nginx…

J’ai comparé les modifications faites à la configuration nginx conseillée à celle qui est mise en place par défaut par Yunohost, la configuration est bien faite et sécurisée (les algorithmes obsolètes sont désactivés par exemple). J’ai toutefois été un peu plus loin en apportant quelques modifications :

Extrait de la configuration de Nginx /etc/nginx/conf.d/blog.mondomaine.org.conf :

ssl_protocols TLSv1.1 TLSv1.2;
#ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;
# On réduit les différents algos de chiffrement utilisable
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

A comparer avec ce que recommande Aeris par exemple, en configuration extrême :
TLSv1.2 + EECDH + AESGCM + SHA-2 only :P

Ce qu’il manque pour avoir une meilleure note, c’est d’avoir du Diffie Hellman. Il faut générer le fichier pour Diffie Hellman, ce qui se fait via :
sudo mkdir -p /etc/nginx/ssl &&
sudo openssl rand 48 -out /etc/nginx/ssl/ticket.key &&
sudo openssl dhparam -out /etc/nginx/ssl/dhparam4.pem 4096

C’est assez long, ça prend une bonne dizaines de minutes (et est très dépendant de la puissance processeur et la génération de nombres aléatoires…)

Ensuite, dans la configuration de Nginx de chacun des domaines et sous-domaine on modifie le fichier de la façon suivante :
# nano /etc/nginx/conf.d/blog.mondomaine.org.conf
# Uncomment the following directive after DH generation
# > openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048
# ssl_dhparam /etc/ssl/private/dh2048.pem;
ssl_dhparam /etc/nginx/ssl/dhparam4.pem;

Une fois ces modifications apportées, on valide que la configuration nginx est sans erreur
nginx -t

On redémarre alors nginx via
service nginx restart
Et on peut de nouveau tester la configuration sur le site du SSLLabs. Et normalement on devrait avoir une note supérieure.

5 Likes

Merci pour ce tuto, j’ai un magnifique A+ maintenant.

Mais je ne comprends pas à quoi sert la commande sudo openssl rand 48 -out /etc/nginx/ssl/ticket.key. J’ai supprimé le fichier ticket.key, et tous continue de marcher.

Can you please explain in English, please?

2 Likes

OK. I’ll translate the main part of this topic to English soon.

How to Yunohost, Let’s Encrypt, A+ au SSLLabs How to English Version
https://forum.yunohost.org/t/yunohost-let-s-encrypt-a-au-ssllabs-how-to-english-version/?source_topic_id=1855

2 Likes

salut merci pour ce tuto
effectivement c etait l une des questions que j avais posée sur ce post
cle-diffie-hellman
très bon tuto…cependant à éviter sur une install #Raspberrypi :wink:

Bump !

Je me permet de remonter ce “How to” pour ajouter des renseignements (et suite à la question de dzamlo) concernant la commande suivante:

openssl rand 48 -out /etc/nginx/ssl/ticket.key

Effectivement générer un ticket ne servira à rien si on ne précise pas dans la conf les paramètres suivants:

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 24h;
ssl_session_tickets on;
ssl_session_ticket_key /etc/nginx/ssl/ticket.key;

Voir la doc nginx pour plus de détails sur ces directives.
Cette doc précise également la chose suivante:

The directive is necessary if the same key has to be shared between multiple servers

En l’absence de fichier, nginx se débrouille seul

Je m’interroge donc sur l’utilité de sa génération et son utilisation sur une instance yunohost.