Aujourd’hui via Touitteur j’ai vu que la nouvelle version Mainline de NGINX, c’est à dire la 1.13.0, introduisait le support natif de TLS 1.3. Je me suis dit que c’était l’occasion de mettre tout ça en pratique. Vous pouvez vous amusez à mettre ça en prod sur vos blogs si ça vous chante.

Pour ce billet, je vais m’appuyer sur l’excellent script de mon coupaing Nicolas Simond

 

 

NGINX tls 1.3 : Pré-requis

Nous allons donc commencer par installer les paquets qui nous permettront de compiler NGINX

apt-get install libgeoip-dev libxslt-dev libpcre3 libpcre3-dev build-essential zlib1g-dev libbz2-dev libssl-dev tar unzip curl git -y

 

Ensuite, naviguons vers le repertoire dans lequel nous compilerons notre programme

cd /usr/src

 

Téléchargeons la dernière version de NGINX et décompressons là

wget https://nginx.org/download/nginx-1.13.0.tar.gz
tar -xaf nginx-1.13.0.tar.gz
mv nginx-1.13.0 nginx

 

Nous allons récupérer une version dev d’OpenSSL supportant TLS 1.3 (Le draft 18)

git clone https://github.com/openssl/openssl.git
cd openssl
git checkout tls1.3-draft-18

 

 

NGINX tls 1.3 : Compilation et installation

Avant de lancer la compilation de NGINX, nous allons appliquer le patch Dynamic TLS Records

cd /usr/src/nginx
wget https://raw.githubusercontent.com/cujanovic/nginx-dynamic-tls-records-patch/master/nginx__dynamic_tls_records_1.11.5%2B.patch
patch -p1 < nginx__dynamic_tls_records_1.11.5*.patch

 

Passons maintenant à la premiere étape de la compilation : configure. Ici j’attire votre attention sur le fait que les développeurs de nginx ou d’OpenSSL sont des trolls…si si…. Parce que vous avez beau utilisé des versions de NGINX et d’OpenSSL supportant nativement tls 1.3, il frauda quand meme spécifier que vous souhaitez l’activer.
troll over 9000

 

./configure \
--http-client-body-temp-path=/usr/local/etc/nginx/body \
--http-fastcgi-temp-path=/usr/local/etc/nginx/fastcgi \
--http-proxy-temp-path=/usr/local/etc/nginx/proxy \
--http-scgi-temp-path=/usr/local/etc/nginx/scgi \
--http-uwsgi-temp-path=/usr/local/etc/nginx/uwsgi \
--user=www-data \
--group=www-data \
--prefix=/etc/nginx \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--with-pcre-jit \
--with-http_v2_module \
--with-debug \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-file-aio \
--with-threads \
--with-http_ssl_module \
--with-http_geoip_module \
--with-ld-opt=-lrt \
--with-openssl=/usr/src/openssl \
--with-openssl-opt=enable-tls1_3

 

Nous pouvons lancer la phase de compilation et l’installation

make -j $(nproc)
make install

 

Si tout se déroule comme prévu voici ce qu’un…

nginx -V

 

…devrait vous retourner

root@noobunbox:/usr/src/openssl$ nginx -V
nginx version: nginx/1.13.0
built with OpenSSL 1.1.1-dev xx XXX xxxx
TLS SNI support enabled
configure arguments: --http-client-body-temp-path=/usr/local/etc/nginx/body --http-fastcgi-temp-path=/usr/local/etc/n ginx/fastcgi --http-proxy-temp-path=/usr/local/etc/nginx/proxy --http-scgi-temp-path=/usr/local/etc/nginx/scgi --http -uwsgi-temp-path=/usr/local/etc/nginx/uwsgi --user=www-data --group=www-data --prefix=/etc/nginx --error-log-path=/va r/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/ng inx.conf --with-pcre-jit --with-http_v2_module --with-debug --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_gzip_static_module --with-http_sub_module --with-http_ xslt_module --with-file-aio --with-threads --with-http_ssl_module --with-http_geoip_module --with-openssl=/usr/src/op enssl --with-openssl-opt=enable-tls1_3 --with-ld-opt=-lrt

 

 

NGINX tls 1.3 : Configuration des vhosts

Nous pouvons enfin passer à l’étape finale, la configuration de vos sites. Il vous suffira de modifier la configuration des protocoles ssl en y ajoutant TLSv1.3 comme ci-dessous

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

 

Et d’ajouter les ciphers suivants à votre variable ssl_ciphers

TLS13-AES-128-GCM-SHA256 TLS13-AES-256-GCM-SHA384 TLS13-CHACHA20-POLY1305-SHA256

 

Ce qui dans mon cas me donne

ssl_ciphers 'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305-D:ECDHE-RSA-CHACHA20-POLY1305-D:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384';

 

Il ne vous reste plus qu’à recharger la configuration NGINX

sudo service nginx reload

 

Nginx tls 1.3

 

It’s aliiiiive

 

 

Catégories : Auto-hébergement

Novakin

Passionné d'informatique depuis de longues années je me suis tourné vers Linux et des solutions de virtualisation il y a peu. Ce blog est une sorte de carnet de web où je partage mes mémos.

S’abonner
Notification pour

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

9 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

J’ai plus qu’à attendre que le package soit mit à jour alors, étant sous Archlinux ! En tout cas merci pour ce tutoriel qui sera utile à plus d’un.
Vivement de pouvoir passer mes sites en TLS 1.3 ! 😀

Bah chez moi cela ne fonctionne pas… pourtant j’ai la dernière version d’Archlinux avec mon fichier de configuration comme il faut, mais que se soit via Chromium et Firefox, ils utilisent TLS 1.2…

T’as bien activé le support de TLS 1.3 dans tes navigateurs ?
https://support.cloudflare.com/hc/en-us/articles/227172348-How-do-I-enable-TLS-1-3-

Vérifie aussi que ton nginx.conf, ou ton premier vhost chargé, ne limite pas les protocoles à TLSv1.2 – ca m’est arrivé

Effectivement c’était ça, même en ayant Firefox 53 la fonction fonctionne ! Sur ton site de test c’est bien en TLS 1.3. Par contre comme CALOMEL SSL ne le prends pas encore en compte, il m’affiche ce site comme ayant HTTPS bien sécurisé à 50%.

Par contre sur mes sites rien… toujours en version 1.2. Normalement aucuns vhost ne limitent les protocoles, car j’ai réglé cela dans nginx.conf directement ! C’est vraiment étrange ça, le package d’Archlinux ne serait-il pas compiler avec TLS 1.3 ? Si c’était le cas, Nginx m’aurait sortit une erreur lorsque je fais : nginx -t.

Pour avoir le tls 1.3 il faut compiler soit meme, normal que ca ne fonctionne pas si tu récupères les package de ta distro.

Concernant CALOMEL SSL, il n’est pas compatible avec TLS 1.3. Contraitement à SSleuth
calomel

Donc impossible pour lui de :

  • Noter le protocole utilisé
  • Déterminer si les cipher suites respectent PFS
  • Déterminer comment se fait l’échange de clé
  • Déterminer le type de certificat
  • Oui j’ai vérifié dans la foulée avec un petit nginx -V et je n’ai pas le support du TLS 1.3 effectivement 🙂 Je vais attendre qu’il soit pris en compte officiellement tant pis ! 😛 Car sur Archlinux ce n’est pas du tout la même manière pour compiler que sous Debian il me semble. Et puis comme les navigateurs ne sont pas encore nativement compatible (il faut l’activer à la main), c’est pas si grave.

    Oui c’est tout à fait exact, mais je préfère CALOMEL SSL à SSleuth. 🙂

    Du coup sans s’embêter à compiler, il est possible d’installer depuis les backports non ?

    Non la version présente dans les backports est la 1.0.2.

    Le master openssl intègre le draft 19, mais celui-ci ne fonctionne pas sous Chrome et Firefox.

    Merci pour la précision !

    9
    0
    Nous aimerions avoir votre avis, veuillez laisser un commentaire.x