GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment activer TLS 1.3 dans Nginx sur Ubuntu 18.04 et 16.04

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.

  1. Votre version de Nginx doit prendre en charge TLS 1.3. Cela signifie nginx 1.13 ou supérieur.
  2. 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.


Ubuntu
  1. Comment activer SSH sur Ubuntu 18.04

  2. Comment installer Nginx avec PHP5 et MySQL sur Ubuntu 11.10

  3. Ubuntu 20.04 - Comment activer Hwe ?

  4. Comment activer HTTP/2 dans Nginx sur Ubuntu et CentOS

  5. Comment activer et désactiver Wayland sur Ubuntu

Comment installer Docker dans Ubuntu 20.04 et exécuter Nginx Container

Comment activer et désactiver les interfaces réseau dans Ubuntu 20.04

Comment activer facilement TLS 1.3 dans Nginx sur Ubuntu 20.04, 18.04, 16.04

Comment activer TLS 1.3 sur Apache et Nginx

Comment installer et configurer Nginx dans Ubuntu 20.04 et Ubuntu 21.04

Comment installer Nginx sur Ubuntu 15.04