Nginx : ajouter un certificat SSL Let’s Encrypt pour passer en HTTPS | IT-Connect

Nginx : ajouter un certificat SSL Let’s Encrypt pour passer en HTTPS

I. Présentation

Dans ce tutoriel, nous allons voir comment configurer son site en HTTPS avec un certificat SSL gratuit Let’s Encrypt en utilisant un serveur Web Nginx.

Mettre en place un site Internet sur un serveur Web et le rendre accessible en HTTP, c’est bien, mais c’est insuffisant : pour un site en production, il est fortement recommandé d’utiliser un certificat SSL et le protocole HTTPS pour sécuriser les connexions. D’autant plus qu’avec Let’s Encrypt, on peut obtenir un certificat gratuitement en quelques minutes.

Je pars du principe que votre serveur Nginx est déjà en place avec un site accessible en HTTP.

II. Installation de Certbot pour Nginx

Commençons par mettre à jour le cache des paquets et à installer les deux paquets (et leurs dépendances) nécessaires à l’utilisation de Certbot sous Debian, avec un serveur Web Nginx. Pour rappel, Certbot est un outil qui sert à effectuer des demandes de certificat Let’s Encrypt.

sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx -y

Voilà pour cette première étape.

III. Let’s Encrypt : demander un certificat SSL pour Nginx

Certbot étant installé sur notre machine, nous allons effectuer une demande de certificat. Pour cela, on va spécifier que l’on utilise un serveur Web sous Nginx (–nginx) et on précise aussi le nom du domaine (-d www.it-connect.tech). Voici la commande complète :

sudo certbot --nginx -d www.it-connect.tech

Le processus est relativement rapide, je vous invite à saisir votre adresse e-mail lorsque ce sera demandé (Enter email address) : un e-mail sera envoyé à cette adresse dans le cas où le certificat ne parvient pas à se renouveler automatiquement et qu’il arrive à expiration. C’est toujours bon à prendre comme information…! 😉

Certbot – Générer un certificat SSL via Let’s Encrypt pour Nginx

Il vous sera demandé si vous souhaitez rediriger automatiquement le trafic HTTP vers HTTPS : ce qui me semble une bonne idée. Dans ce cas, indiquez « 2 » et appuyez sur entrée. On peut voir également les chemins vers le certificat et la clé privée associée.

Si tout se passe bien, vous avez le droit à un joli « Congratulations !« . Dans ce cas, le certificat est déjà installé sur votre site Web car Certbot s’est occupé de configurer le bloc Server correspondant. La classe, n’est-ce pas ?

Allons-voir quelles sont les modifications apportées par Certbot dans le fichier de configuration de notre site…

sudo cat /etc/nginx/sites-enabled/it-connect.tech

Voici le contenu du fichier avec les modifications principales en jaune :

Intégration du certificat Let's Encrypt dans la configuration de Nginx
Intégration du certificat Let’s Encrypt dans la configuration de Nginx

Concrètement, Certbot a déclaré le port 443 comme port d’écoute, ce qui correspond au HTTPS, à la fois pour toutes les adresses IPv4 du serveur, mais aussi toutes les adresses IPv6.

listen (::)::443 ssl ipv6only=on;
listen 443 ssl;

Il a également ajouté les chemins vers le certificat SSL (ssl_certificate) et la clé privée (ssl_certificate_key) obtenus suite à la génération du certificat Let’s Encrypt.

ssl_certificate /etc/letsencrypt/live/www.it-connect.tech/fullchain.pem; # managed by Certbot 
ssl_certificate_key /etc/letsencrypt/live/www.it-connect.tech/privkey.pem; # managed by Certbot 
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot 
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

Le fichier de configuration options-ssl-nginx.conf (include…) est chargé également et il contient les paramètres SSL/TLS, notamment les protocoles actifs.

# Extrait du fichier options-ssl-nginx.conf
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

Comme nous avons demandé à rediriger les flux HTTP vers HTTP, le fichier de configuration contient une règle de redirection au niveau du groupe Server pour la partie HTTP (listen 80). En gros, si l’on accède à l’adresse www.it-connect.tech ($host = www.it-connect.tech), il y a une redirection de type 301 (c’est-à-dire permanente) qui est déclenchée vers la même adresse, mais en HTTPS://.

if ($host = www.it-connect.tech) 
    return 301 https://$host$request_uri;
 # managed by Certbot

Note : ces différentes options seraient à intégrer dans le fichier manuellement dans le cas où l’on utilise un autre certificat que Let’s Encrypt, où il faut réaliser l’intégration soi-même.

Maintenant que l’on en sait un peu plus sur les modifications apportées par Certbot, il est temps de tester : est-ce que l’accès HTTPS sur notre site fonctionne bien ?

IV. Vérifier le certificat SSL

Rendez-vous sur le site ! Non pas en HTTPS directement, mais en HTTP, ce sera l’occasion de vérifier que la redirection HTTP vers HTTPS fonctionne bien, tant qu’à faire !

Ensuite, un beau cadenas devrait s’afficher pour nous indiquer que la connexion est sécurisée. Si l’on regarde le détail du certificat, on peut voir qu’il est émis par Let’s Encrypt. C’est tout bon !

V. HTTPS : renouvellement automatique du certificat SSL

Je ne l’ai pas encore précisé, mais un certificat Let’s Encrypt a une durée de validité assez courte : 90 jours. Néanmoins, il ne faudra pas le renouveler manuellement tous les 90 jours puisque Certbot va s’en occuper, tout seul comme un grand. Il a déjà fait le nécessaire sur notre machine en créant une tâche planifiée (cron).

Il suffit de regarder le contenu du fichier suivant pour se rassurer :

sudo nano /etc/cron.d/certbot

La tâche planifiée va s’exécuter de façon à renouveler le certificat avant qu’il expire.

Tâche planifiée pour renouveler le certificat SSL
Tâche planifiée pour renouveler le certificat SSL

Si vous souhaitez réaliser un essai, vous pouvez exécuter un « –dry-run » pour faire une simulation de renouvellement. Tout simplement, voici la commande à exécuter :

sudo certbot renew --dry-run

Vous devriez obtenir une sortie similaire à celle-ci :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/www.it-connect.tech/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Le message « Congratulations, all renewals succeeded. » est rassurant puisqu’il indique que le certificat aurait été renouvelé correctement si cela avait été nécessaire. Maintenant, la tâche planifiée va s’occuper de gérer cette opération à notre place. En cas de soucis, souvenez-vous qu’un e-mail sera envoyé sur l’adresse précisée lors de la création du certificat.

Voilà, votre site Web sous Nginx bénéficie d’un certificat SSL Let’s Encrypt et il est accessible en HTTPS.

Hébergez votre site à partir de 2$ sur 👉👉👉 https://www.tnctech.ca

À propos Santana

Analyste en cybersécurité avec 5 ans d'expérience dans la protection des systèmes d'information contre les menaces et les attaques. Expertise dans la surveillance des réseaux, l'analyse des vulnérabilités, et la gestion des incidents de sécurité. Passionnée par l'innovation technologique et la mise en œuvre de solutions de sécurité robustes pour protéger les données sensibles et assurer la conformité réglementaire.

Vérifiez également

Debian – comment installer Nginx en tant que serveur Web ?

Debian – comment installer Nginx en tant que serveur Web ?

Table de Matieres0.1 I. Présentation0.2 II. Installer Nginx0.3 III. Créer un premier site dans Nginx1 …

Configurer Nginx en tant que reverse proxy

Configurer Nginx en tant que reverse proxy

Table de Matieres1 I. Présentation2 II. Architecture réseau3 III. Configuration de Nginx4 I. Présentation Lorsque …

Reverse proxy Nginx : Load-balancing et Fail-Over

Reverse proxy Nginx : Load-balancing et Fail-Over

Table de Matieres1 I. Présentation2 II. Reverse proxy, Load-Balancing & Fail-Over3 III. Présentation de l’architecture …

Laisser un commentaire

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