HTTPS est devenu plus rapide et plus sûr grâce à la publication de TLS 1.3 par IETF (RFC 8446) en août 2018. TLS 1.3 est désormais la dernière version du protocole TLS. Ce tutoriel vous montrera comment activer TLS 1.3 dans le serveur Web Nginx sur Ubuntu 18.04 et Ubuntu 16.04.
Mettre à jour :Il existe un moyen plus simple d'activer TLS 1.3. Voir cet article :Comment activer facilement TLS 1.3 dans Nginx sur Ubuntu 18.10, 18.04, 16.04, 14.04
TLS 1.3 :performances et sécurité améliorées
En termes de performances, TLS 1.2 a besoin de deux allers-retours pour établir une connexion HTTPS. Avec TLS 1.3, un seul aller-retour est nécessaire. TLS 1.3 prend également en charge le mode zéro aller-retour (reprise de session 0-RTT), permettant aux clients qui se sont déjà connectés à votre site Web d'envoyer une requête HTTP sur le premier message au serveur. Cela fait une grande différence pour les utilisateurs sur les réseaux mobiles ou dans des endroits éloignés.
En termes de sécurité, TLS 1.3 a supprimé la prise en charge des anciennes suites de chiffrement, responsables d'exploits tels que l'attaque ROBOT. En tant que tels, les administrateurs de serveur ne peuvent plus ajouter d'anciennes suites de chiffrement dans TLS 1.3 pour apaiser les utilisateurs d'anciens navigateurs Web. Ceci, bien sûr, est une explication simpliste. CloudFlare a une bonne explication détaillée de TLS 1.3.
Activer TLS 1.3 dans Nginx sur Ubuntu 18.04, Ubuntu 16.04
Il y a deux exigences pour activer TLS 1.3 avec Nginx.
- Votre version de Nginx doit prendre en charge TLS 1.3. Cela signifie nginx 1.13 ou supérieur.
- Nginx doit soit être compilé avec OpenSSL 1.1.1+, soit fonctionner avec OpenSSL 1.1.1+.
La deuxième exigence peut sembler déroutante, alors laissez-moi vous donner deux exemples.
- Ubuntu 18.04 est livré avec OpenSSL 1.1.0. Remplacer la bibliothèque système OpenSSL n'est pas une bonne idée, mais vous pouvez télécharger le code source OpenSSL 1.1.1 et compiler Nginx avec le code source OpenSSL 1.1.1 pour activer TLS 1.3.
- Arch Linux est actuellement livré avec OpenSSL 1.1.1, mais le package Nginx dans le référentiel Arch est en fait construit avec OpenSSL 1.1.0. Dans ce cas, Nginx n'est pas construit avec OpenSSL 1.1.1, mais il fonctionne avec OpenSSL 1.1.1.
Voyons maintenant comment compiler Nginx avec OpenSSL 1.1.1 sur Ubuntu 18.04 et Ubuntu 16.04.
1. Ajout du référentiel Nginx officiel
Au lieu de télécharger l'archive source et de la compiler avec make
, je vais ajouter le référentiel Nginx officiel à mon serveur Ubuntu, puis créer un package deb à partir du code source. De cette façon, je n'ai pas besoin d'ajouter manuellement une longue liste de paramètres de configuration au configure
commande. Il y aura également un fichier de service systemd pratique dans le paquet deb.
Récupérez d'abord la clé GPG Nginx et importez-la dans Ubuntu.
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
Créez ensuite un fichier de liste source pour le dépôt Nginx.
sudo nano /etc/apt/sources.list.d/nginx.list
Ajoutez les deux lignes suivantes dans le fichier. Le deb-src
nous permet de télécharger les packages source Nginx avec apt source
commande. Bonic
est le nom de code d'Ubuntu 18.04. Si vous utilisez Ubuntu 16.04, remplacez-le par xenial
. (Remarque :ce référentiel ne prend pas en charge les systèmes d'exploitation 32 bits.)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Pour enregistrer un fichier dans l'éditeur de texte Nano, appuyez sur Ctrl+O
, puis appuyez sur Entrée pour confirmer. Pour quitter, appuyez sur Ctrl+X
. Ensuite, mettez à jour l'index des packages locaux.
sudo apt update
Le référentiel officiel Nginx est maintenant ajouté au serveur Ubuntu.
2. Télécharger le code source Nginx et OpenSSL
Nous allons créer un nginx
répertoire sous /usr/local/src/
pour stocker les sources Nginx puis cd
dans ce répertoire.
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
Téléchargez le package source Nginx avec la commande ci-dessous :
sudo apt install dpkg-dev sudo apt source nginx
Découvrez les fichiers téléchargés.
ls
Sortie :
nginx-1.15.3 nginx_1.15.3-1~bionic.dsc nginx_1.15.3-1~bionic.debian.tar.xz nginx_1.15.3.orig.tar.gz
Ensuite, clonez le référentiel github OpenSSL.
cd /usr/local/src sudo apt install git sudo git clone https://github.com/openssl/openssl.git cd openssl
Ensuite, listez toutes les branches et passez à la branche stable 1.1.1.
git branch -a sudo git checkout OpenSSL_1_1_1-stable
3. Modifier les règles de compilation Nginx
Modifier le fichier de règles de compilation Nginx.
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules
Recherchez config.status.nginx: config.env.nginx
section. Ajoutez le texte suivant à la fin de la ligne CFLAGS. Notez que le texte suivant n'est pas une ligne en soi.
--with-openssl=/usr/local/src/openssl
Enregistrez et fermez le fichier.
4. Compiler Nginx
Assurez-vous d'être dans le répertoire source de Nginx.
cd /usr/local/src/nginx/nginx-1.15.3/
Installez les dépendances pour créer notre package deb Nginx.
sudo apt build-dep nginx
Utilisez maintenant la commande suivante pour créer le package deb.
sudo dpkg-buildpackage -b
Si vous voyez l'erreur suivante,
missing initializer for field 'md_ctrl' of 'EVP_MD {aka const struct evp_md_st}
Puis éditez le auto/cc/gcc
fichier.
sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc
Commentez la ligne suivante. Le -Werror
flag oblige GCC à traiter les avertissements comme des erreurs.
CFLAGS="$CFLAGS -Werror"
Ensuite, relancez la commande build. Une fois la compilation terminée, il y aura un package deb Nginx dans /usr/local/src/nginx/
annuaire. Si vous avez déjà installé Nginx, il est temps de supprimer l'ancienne version, puis d'installer la nouvelle version.
sudo apt remove nginx nginx-common nginx-full cd /usr/local/src/nginx/ sudo dpkg -i nginx_1.15.3-1~bionic_amd64.deb
Commençons maintenant Nginx.
sudo systemctl start nginx
Si vous voyez le message d'erreur suivant.
Failed to start nginx.service: Unit nginx.service is masked.
Démasquez ensuite nginx et relancez la commande start.
sudo systemctl unmask nginx
Notez que le processus Nginx peut s'exécuter en tant qu'utilisateur nginx
ou www-data
. Cela peut être modifié en modifiant la première ligne dans /etc/nginx/nginx.conf
dossier. Assurez-vous simplement que Nginx s'exécute sous le même utilisateur avec PHP-FPM.
Vérifiez maintenant les arguments de configuration de Nginx.
sudo nginx -V
Comme vous pouvez le voir, nous avons la dernière version de Nginx construite avec OpenSSL 1.1.1.
5. Activer TLS 1.3 dans Nginx Server Block
Maintenant, je suppose que vous avez déjà activé HTTPS pour votre bloc de serveur Nginx. La syntaxe pour activer TLS 1.3 est assez simple. Ouvrez votre fichier de bloc de serveur Nginx dans /etc/nginx/conf.d/
répertoire ou /etc/nginx/sites-enabled/
annuaire. Trouvez la ligne suivante.
ssl_protocols TLSv1.2;
Ajouter TLSv1.3
à la liste des protocoles.
ssl_protocols TLSv1.2 TLSv1.3;
Ajoutez ensuite les 3 suites de chiffrement suivantes à vos suites de chiffrement existantes.
TLS-CHACHA20-POLY1305-SHA256 TLS-AES-256-GCM-SHA384 TLS-AES-128-GCM-SHA256
comme ça :
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Enregistrez et fermez le fichier. Testez ensuite la configuration de Nginx et rechargez.
sudo nginx -t sudo systemctl reload nginx
Il est peu probable qu'Ubuntu 18.04 passe à OpenSSL 1.1.1, donc si vous mettez à niveau Nginx avec sudo apt upgrade
commande, TLS 1.3 aura disparu. C'est une bonne idée d'empêcher Nginx d'être mis à jour par apt
avec cette commande :
sudo apt-mark hold nginx
Mise à jour :à partir de Nginx 1.15.4, vous pouvez activer 0-RTT avec OpenSSL en ajoutant la directive suivante dans le contexte du serveur ssl. La valeur par défaut est définie sur off
. Dans la version précédente 1.15.3, il ne peut être utilisé qu'avec BoringSSL.
ssl_early_data on
Activer TLS 1.3 dans Google Chrome
Actuellement, Firefox 62 et Chrome 69 ne prennent en charge que le brouillon 28 de TLS 1.3. OpenSSL 1.1.1 prend en charge la version finale de TLS 1.3. Les implémentations basées sur la version brouillon et la version RFC finale n'interagissent pas entre elles.
Pour tester notre serveur Nginx maintenant, nous devons installer la version bêta de Google Chrome et activer la version finale de TLS 1.3. Une fois la version bêta de Chrome installée, saisissez chrome://flags/#tls13-variant
dans la barre d'adresse et passer de default
à Enabled (Final)
. Relancez ensuite Google Chrome pour que la modification prenne effet.
Accédez maintenant à votre site Web compatible TLS 1.3 dans la version bêta de Google Chrome et appuyez sur Ctrl+Shift+I
pour ouvrir la page des outils de développement. Allez dans Security
languette. Vous pouvez voir la version de TLS utilisée.
Firefox devrait livrer la version finale de TLS 1.3 dans Firefox 63, prévue pour octobre 2018. Dans Chrome 70, la version finale de TLS 1.3 sera activée pour les connexions sortantes.
Mise à jour :Chrome 70 a ajouté la prise en charge de la version finale de TLS 1.3, mais il utilise toujours par défaut le brouillon 28 de TLS 1.3.Activer TLS 1.3 avec CloudFlare
Si vous utilisez CloudFlare CDN (Content Delivery Network), votre site Web utilise déjà TLS1.3. Dans le tableau de bord CloudFlare, sélectionnez le crypto
et vous verrez l'option pour activer/désactiver TLS 1.3. Vous pouvez également activer 0-RTT. CloudFlare prend en charge à la fois la version brouillon 28 et la version finale.
C'est ça! J'espère que ce tutoriel vous a aidé à activer TLS 1.3 dans Nginx sur Ubuntu 18.04 et Ubuntu 16.04. Prenez soin de vous.