Le blog de Genma
Vous êtes ici : Accueil » Informatique » Autohébergement » Yunohost, Let’s Encrypt, A+ au SSLLabs

Yunohost, Let’s Encrypt, A+ au SSLLabs

D 24 août 2016     H 09:00     A Genma     C 5 messages   Logo Tipee

TAGS : Https Planet Libre Yunohost Sysadmin

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.

5 Messages

  • https://angristan.fr/configurer-https-nginx/ a aussi un guide très complet (qui inclut par exemple HTTP/2).

    Pour le test de nginx, de toute manière il le fait seul au redémarrage, donc si planter le serveur quelques minutes (en cas d’erreur) n’est pas un problème, c’est encore plus rapide.

    Pourquoi garde-tu du Diffie Hellman ? C’est nettement moins robuste de le ECDHE (bon c’est bien quand même, et il sera moins prioritaire).
    Et puisque que tu est seul à t’y connecter, sur des appareils récents, ça ne posera pas de problème (j’ai pas de DHE sur mon serveur, seul un Explorer 7 ne passe pas - mais j’ai gardé TLS 1.1).


  • Personnellement j’utilise l’extension SSLeuth qui s’intègre avec la barre d’adresse de Firefox.
    Elle est restart-less et fait moins de choses de Calomel (qui propose entre autre de bloquer les GIF ?!?)


  • Je plussoie le commentaire de lapineige, d’ailleurs pour éviter de redémarrer nginx, tu peux faire nginx -s, qui équivaut un service nginx reload et te dira si il y a des problème (dont tu pourra avoir plus de détails grâce à nginx -t)

    PS : ce site d’aeris est très bien pour tester sa conf HTTPS : https://tls.imirhil.fr/ (mais j’en parle dans mon article)


  • Pour ma part, je n’aime pas énumérer les ciphers à utiliser de manière restrictive.
    En faisant ainsi, tu risques de te priver de nouveaux algorithmes comme Camellia, Poly Chacha ou d’autres.
    De plus, avec ta chaine, tu ne gère que AES, ce qui peut-être gênant pour les smartphones qui contrairement aux PC de bureau n’ont pas de puce dédiée au chiffrement AES et préfèrent d’autres algorithmes purement logiciels et optimisés pour eux.

    Je préfère exclure les ciphers obsolètes mais laisser la porte ouverte, par exemple avec la chaine suivante : EECDH : !3DES : !RC4 : !NULL
    Ainsi si un nouvel algorithme est publié dans OpenSSL, il sera disponible immédiatement pour les clients web.


  • Hello,

    Merci pour ce tuto ! Ca fait un petit bout que je l’avais vu, mais au hasard des intertubes, je suis retombé dessus :)

    Juste une petite question :
    à quoi te sert le fichier ticket.key qui est créé mais jamais utilisé ?


Un message, un commentaire ?
modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.