Lorsque vous hébergez une application Web avec Nginx, il est important de sécuriser les communications avec ce dernier par le biais d’un certificat SSL. Si vous n’avez pas la possibilité d’en acheter un, il existe la solution Let’s Encrypt qui vous aide à obtenir un certificat gratuitement. Dans cet article, nous verrons comment installer un et configurer un serveur web Nginx avec un certificat Let’s Encrypt sur un serveur Ubuntu 22.04.
Prérequis
Afin de pouvoir suivre ce guide, vous devez disposer :
- D’un nom de domaine avec un enregistrement DNS configuré. Cela signifie qu’il faudra lier au préalable l’adresse IP publique de votre serveur au nom de domaine en question.
- D’un serveur Linux sous Ubuntu 22.04.
Installer Nginx et PHP
Avant d’installer votre certificat https avec Let’s Encrypt sur Ubuntu, il vous faut un serveur web. Pour l’exemple, nous utiliserons Nginx, un serveur web open-source très utilisé comme serveur HTTP, reverse proxy, cache HTTP, et load balancer et d’autres services.
Au préalable, mettez à jour le cache des dépôts de votre serveur.
$ sudo apt update
Nous pouvons à présent passer à l’installation de Nginx.
$ $ sudo apt install nginx php-fpm php-mysql
Il faut ensuite le démarrer et l’activer automatiquement.
$ sudo systemctl start Nginx
$ sudo systemctl status nginx
$ sudo systemctl enable Nginx
Configurer le pare-feu
Il est important de configurer le pare-feu afin d’autoriser uniquement les communications nécessaires au fonctionnement de votre serveur, notamment http, https et SSH. S’il s’agit d’un nouveau serveur, alors votre pare-feu pourrait être désactivé. Vérifier son statut pour vous en assurer :
$ sudo ufw status
Listons maintenant les applications détectées pour sélectionner celles à autoriser.
$ sudo ufw app list
Le résultat vous affiche 4 profils prédéfinis :
- Nginx Full qui est le profil permettant d’ouvrir simultanément les ports 80 (HTTP) et 443 (HTTPS)
- Nginx HTTP étant le profil à utiliser pour ouvrir uniquement le port 80
- Nginx HTTPS pour le profil qui servira à ouvrir uniquement le port 443 (HTTPS)
- OpenSSH qui est le profil du port 22 (SSH)
Avant d’activer le pare-feu, il nous faudra au préalable autoriser l’accès SSH pour ne pas perdre la connexion au serveur.
$ sudo ufw allow 'OpenSSH'
Nous allons également autoriser les ports 80 et 443 avec le profil Nginx Full.
$ sudo ufw allow 'Nginx Full'
Après la modification d’une règle du pare-feu, il faut le redémarrer.
$ sudo ufw disable && sudo ufw enable
Il faut à présent vérifier s’il est bien actif.
$ sudo ufw status
Vous pouvez tester l’accès dans un premier temps en entrant l’adresse IP du serveur dans la barre d’adresse de votre navigateur http://IP-SERVER
Créer un bloc serveur pour l’accès avec le nom de domaine
Pour accéder à votre service web par le nom de domaine, vous devez créer un bloc serveur dans le fichier de configuration. Ces fichiers sont généralement créés dans le répertoire /etc/nginx/sites-available/
$ sudo vim /etc/nginx/sites-available/web-demo.com
Nous allons désactiver la configuration par défaut présente de Nginx pour éviter un éventuel conflit :
$ sudo rm /etc/nginx/sites-enabled/default
Activons notre configuration en créant un raccourci de notre fichier dans le dossier /etc/nginx/sites-enabled/
$ sudo ln -s /etc/nginx/sites-available/web-demo.com /etc/nginx/sites-enabled/
Vérifions à présent que notre configuration ne comporte aucune erreur :
Il faut redémarrer le service pour prendre en compte les modifications :
$ sudo systemctl restart nginx.service
Vous pouvez ouvrir votre navigateur pour tester l’accès http://web-demo.com
. Vous constaterez qu’il n’est pas encore sécurisé. Passons maintenant à l’installation de Let’s Encrypt sur Ubuntu 22.04.
Installer Let’s encrypt et générer un certificat sur Ubuntu
Let’s encrypt est une Autorité de certification (CA) qui délivre gratuitement des certificats pour la mise en place d’un serveur HTTPS reconnu nativement par les navigateurs. Pour ce faire, il examine le nom de domaine et s’assure qu’un enregistrement DNS est configuré. Contrairement aux certificats classiques, ceux qu’ils offrent ont une validité de 90 jours. Ce qui veut dire que vous devez les renouveler manuellement tous les 03 mois ou encore passer par une tâche CRON qui le fera pour vous. L’installation de Let’s Encrypt sur Ubuntu peut se faire au travers de certbot.
$ sudo apt install certbot python3-certbot-nginx
À présent, nous pouvons générer le certificat pour le nom de domaine désiré. N’oubliez pas qu’un enregistrement DNS doit exister au préalable.
$ sudo certbot --nginx -d web-demo.com
Pendant le processus, nous avons validé la redirection automatique de HTTP vers HTTPS, vous constaterez que certbot a ajouté des lignes au fichier de configuration.
$ vim /etc/nginx/sites-available/web-demo.com
Il faut redémarrer Nginx pour la prise en compte des modifications
$ sudo systemctl restart nginx.service
Vous pouvez essayer d’accéder à votre domaine via le lien non sécurisé http://web-demo.com
. Vous verrez qu’il redirige automatiquement vers le lien sécurisé https://web-demo.com
Vous avez à présent un serveur web Nginx sécurisé avec un certificat let’s Encrypt sur votre serveur Linux Ubuntu 22.04.