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.
Dans le cadre de l’autohébergement de mon cloud personnel sur Yunohost, j’ai remplacé le certificat autosigné par un certificat Let’s Encrypt, pour le domaine principal ainsi que les sous-domaines. Pour ce, 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.