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,
Maintenant que le draft de TLS 1.3 a été validé dans sa version finale, on va enfin voir comment utiliser TLS 1.3 avec Nginx et Debian 9.
Pour plus d’informations
J’ai déjà fait un article en détail sur la compilation de NGINX, nous n’y reviendrons pas ici : https://www.abyssproject.net/2016/11/compiler-nginx-pourquoi-comment/
Si vous voulez installer un serveur web complet, vous pouvez commencer par la : https://www.abyssproject.net/2017/06/monter-serveur-web-debian-9/
Prérequis
- Pas de nginx déjà installé
- Avoir un Debian 9 parfaitement à jour
- Avoir un certificat SSL avec Let’s Encrypt par exemple : https://www.abyssproject.net/2016/02/creer-un-certificat-ecdsa-avec-lets-encrypt/
Installation ou mise à jour du NGINX existant
Télécharger et lancez mon script de build, répondez simplement aux deux questions posées au début selon votre situation :
cd /tmp && wget --no-check-certificate https://raw.githubusercontent.com/stylersnico/nginx-openssl-chacha/master/build.sh && sh build.sh Did you run this script before? (y/n) y Do you want NAXSI WAF (still experimental)? (y/n) y
Maintenant, vous aurez un NGINX compilé avec la dernière version dev de OpenSSL 1.1 et avec le support de TLS 1.3 activé pour les draft 23 + 26 + 27 + 28 + final.
Les changements dans la configuration existante
Maintenant, il va falloir faire les modifications dans NGINX pour que vous puissiez utiliser TLS 1.3.
On va voir uniquement ce qui change, si vous voulez une configuration complète, optimisée et sécurisée alors vous pouvez vous tourner vers ma configuration standard : https://github.com/stylersnico/nginx-secure-config
Ouvrez votre fichier de configuration NGINX :
nano /etc/nginx/nginx.conf
Recherchez d’abord la ligne des protocoles :
ssl_protocols TLSv1.2;
Ici, ajoutez la nouvelle version de TLS :
ssl_protocols TLSv1.2 TLSv1.3;
Maintenant, il va falloir chercher la ligne qui spécifie les ciphers utilisés :
ssl_ciphers 'EECDH+AESGCM:EECDH+CHACHA20';
Ajoutez les ciphers spécifiques au nouveau protocole au début :
ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AESGCM:EECDH+CHACHA20';
Maintenant, redémarrez nginx :
service nginx restart
Validation de la bonne configuration
Maintenant, le moyen le plus simple pour valider la bonne marche du fonctionnement de TLS 1.3 c’est de visiter votre site avec un Firefox ou Chrome à jour.
Ouvrez les détails de votre connexion TLS et vous devriez voir que vous utilisez bien le nouveau protocole :
Vous pouvez aussi allez sur SSLLABS et valider la bonne marche de votre domaine : https://dev.ssllabs.com/ssltest/analyze.html?d=abyssproject.net&s=195.201.117.190
Petite erreur depuis peu (j’avais pas eu ça en septembre)
can’t find file to patch at input line 486
Perhaps you used the wrong -p or –strip option?
The text leading up to this was:
————————–
|diff –git a/ssl/ssl_locl.h b/ssl/ssl_locl.h
|index 33db1460ab..00c5ee4cff 100644
|— a/ssl/ssl_locl.h
|+++ b/ssl/ssl_locl.h
————————–
File to patch:
Hello,
Il faut aller sur Github pour cela 😉
Pour ceux qui ont des erreurs à cause de Nginx 1.15.4, perso j’ai modifié ces deux lignes dans le script (pour rester en 1.15.3):
#latest_nginx=$(curl -L http://nginx.org/en/download.html | egrep -o « nginx\-[0-9.]+\.tar[.a-z]* » | head -n 1)
latest_nginx=$(curl -L http://nginx.org/en/download.html | egrep -o « nginx-1.15.3.tar.gz » | head -n 1)
#(curl -fLRO « http://nginx.org/download/${latest_nginx} » && tar -xaf « ${latest_nginx} ») &
(curl -fLRO « http://nginx.org/download/nginx-1.15.3.tar.gz » && tar -xaf « nginx-1.15.3.tar.gz ») &
Salut Nicolas,
saurais-tu comment faire pour ajouter cette commande dans ton script build.sh ?
./config –prefix=/usr/src/openssl/.openssl –openssldir=/etc/ssl –libdir=/usr/lib/x86_64-linux-gnu shared zlib-dynamic -Wl,-R,’$(LIBRPATH)’ -Wl,–enable-new-dtags
Merci d’avance
Je vois beaucoup de problème qui font que je n’exécuterai pas ces instructions dans l’état actuel des choses. Pour être constructif, voici les points qui me pose problème: – Un script lambda récupéré sur le net en désactivant explicitement la vérification du certificat (pourquoi cette désactivation, c’est louche). On n’apprends pas grand chose sans ouvrir le script, et en cas d’erreur (dans une année lorsque certaines ressources auront trop changés ou auront disparus) il sera compliqué d’adapter. – Un script exécuté en root, au revoir la sécurité. – Un script sans le « set -eu », s’il y a une erreur, ça… Voir plus »
Bonjour? 1 – Personne ne te force a faire quoi que ce soit. 2 – On apprend grand-chose sans ouvrir le script, il suffit de suivre le lien que j’ai posté qui l’explique (la première remarque est justifiée, c’est un héritage legacy d’un moment ou le wget de Debian déconnait avec Github) 3 – On ne stocke pas le home dans ce répertoire, mais pourquoi pas. Pour finir, De 1, si quelqu’un fini ici, c’est qu’il sait manifestement ce qu’il fait ou ce qu’il va faire, cet article n’est pas accessible et n’explique pas ce qu’est TLS 1.3 pour une… Voir plus »
Rien ne t’empêche de proposer des changements dans le code du script non ?
Sérieusement cette mentalité dans le libre de critiquer avec un ton condescendant commence littéralement a me gaver.
J’ai bien pris le temps d’expliquer les points qui me posent problème et le problème général qu’il y a a exécuter un script tout fait sur internet; si tu trouves le condescendant, je suis désolé; mais ça ne change rien au fond. Et lister les points est justement une façon de faire des remontées et de proposer des changements.
Bonjour et merci pour ce billet ! Sinon aujourd’hui (2018-08-30) et probablement depuis quelques jours, Nginx v1.13 (qui supporte TLS1.3) est dans les repos stretch-backports. L’image docker officielle de nginx est aussi au moins en v1.13 et traefik (https://docs.traefik.io/) doit aussi probablement gèrer TLS1.3 car basé sur nginx v1.13 / image docker. Donc la phase de download / compilation devient inutile et c’est tant mieux 😉 On a donc dans l’ordre d’abstraction croissant : 1 – Nginx direct sur un serveur : Debian + stretch-backports + nginx 1.13 + conf adéquate 2 – Nginx dans docker : Debian + docker… Voir plus »
Hello,
Nginx 1.13 ne suffit pas pour le support TLS 1.3.
Il faut également OpenSSL 1.1.0 compilé avec le support spécifique de TLS 1.3 et le patch pour ajouter tous les drafts. Il est donc a minima obligatoire de toujours compiler OpenSSL qui lui n’est disponible dans aucun dépôt Debian avec la compatibilité annoncée dans cet article.
Au temps pour moi j’aurais mieux fait de tester avant de raconter nimp’ 😉
Dit toi que tu auras appris un truc aujourd’hui 🙂