Sécuriser son site web avec Let’s Encrypt et Certbot

Linux - Debian

Dans ce tutorial nous allons apprendre comment installer un certificat SSL avec « Let’s encrypt ». Nous allons utiliser « certbot » pour obtenir notre certificat SSL libre pour Nginx sur Debian. Ensuite, nous allons mettre en place des paramètres permettant de le ou les renouveler automatiquement. 

Présentation de « Let’s Encrypt » et « Certbot »

Let's Encrypt (abrégé LE) est une autorité de certification lancée le 3 décembre 2015 (Bêta Version Publique). Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un processus automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites internet. En septembre 2016, plus de 10 millions de certificats ont été délivrés.

En février 2017, Let's encrypt était utilisé par 13,70% du total des domaines français enregistrés.

En décembre 2019, Let's encrypt fournit 54,67 % des certificats TLS.

Redirigez-vous vers ce site pour en savoir plus sur Let’s encrypt.


Certbot est un outil gratuit de logiciel open-source permettant d’utiliser automatiquement les certificats « Let’s encrypt » sur des sites administrés manuellement pour activer « Https ».

Certbot a été créée par Electronic Frontier Foundation (EFF), une organisation à but non lucratif 501 (c) 3, basée à San Francisco, en Californie, qui défend la confidentialité numérique, la liberté d’expression et l’innovation.

Redirigez-vous vers ce site pour en savoir plus sur Certbot.

Installation de « Certbot »

Voici les quelques étapes à suivre pour installer certbot :

  • Mise à jour de notre base de données apt :
sudo apt-get update
  • Installation :
sudo apt-get -y install certbot
  • Vérification l’installation :
sudo certbot –version

Vérification de notre configuration de Nginx

Certbot doit être en mesure de trouver le bon bloc de serveur dans votre configuration Nginx pour qu'il puisse configurer automatiquement SSL. Plus précisément, il le fait en recherchant une directive « server_name » qui correspond au domaine pour lequel vous demandez un certificat.

Si vous avez bien suivi le tutorial « déploiement d’une application NextJS sur un VPS » que j’ai mis en ligne récemment, en vous rendant dans le répertoire « /etc/nginx/sites-available », vous devrez avoir un fichier nommé « default ». Ce fichier contient la configuration de base de notre application déployée sur nginx et si vous regardez dans ce fichier, vous devrez retrouver la directive « server_name »

Pour checker cela, entrez cette commande :

sudo nano /etc/nginx/sites-available/default

Recherchez la directive « server_name » :

server_name example.com www.example.com;

Si elle existe déjà, quitter l’édition et passer à l’étape suivante.

Si non, mettez à jour votre fichier en rajoutant le « server_name », enregistrer et tester la configuration avec : 

sudo nginx -t

Et redémarrer nginx :

sudo systemctl reload nginx

Autoriser « HTTPS » via le Pare-feu

Si vous avez le pare-feu « ufw » activé, nous devrons ajuster certains paramètres pour autoriser le trafic HTTPS.

Nous pouvons voir la configuration actuelle avec cette commande :

sudo ufw status

image_1_TmVg_YDtr.png

Pour rajouter le trafic HTTPS en plus, autorisez le profil complet Nginx :

sudo ufw allow 'Nginx Full'

Et votre statut devrait ressembler à peu près à cela : 

H7raM3Tvte4AAAAAAElFTkSuQmCC

Ensuite, exécutons Certbot et récupérons nos certificats. 

Obtention d’un certificat SSL

Certbot propose différentes manières d'obtenir des certificats SSL via des plugins. Le plugin Nginx se chargera de reconfigurer Nginx et de recharger la configuration chaque fois que cela sera nécessaire.

Pour utiliser ce plugin, tapez ce qui suit :

sudo certbot --nginx -d fredoandrianaivo.com -d www.fredoandrianaivo.com


Note :

Si vous tombez sur une erreur comme celle-ci:

1K6Hs5236f48gNHSGEEEIIyWgWEvJn0U+p3v2VQEIIIYQQQj5Ms5AQQgghhBBCyPVpFhJCCCGEEEIIuT7NQkIIIYQQQggh16dZSAghhBBCCCHk0vz3+z9gbbJfsuxZmgAAAABJRU5ErkJggg==

Exécuter cette commande pour le corriger : 

sudo apt install certbot python3-certbot-nginx

Et relancer la commande : 

sudo certbot --nginx -d fredoandrianaivo.com -d www.fredoandrianaivo.com

Cela exécute certbot avec le plug-in « --nginx », en utilisant « -d » pour spécifier les noms de domaine pour lesquels nous souhaitons que le certificat soit valide.

S'il s'agit de votre première utilisation de certbot, vous serez invité à saisir une adresse e-mail et à accepter les conditions d'utilisation. Après cela, certbot communiquera avec le serveur Let's Encrypt, puis lancera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

Si cela réussit, certbot vous demandera comment vous souhaitez configurer vos paramètres HTTPS. Si tout s’est bien passé pour vous (comme pour moi :)), vous devriez avoir ce genre de message à la fin de la processus : 

image_3_UBo4FSnFI.png

Vos certificats sont téléchargés, installés et chargés. Essayez de recharger votre site Web en utilisant https:// et notez l'indicateur de sécurité de votre navigateur. Il doit indiquer que le site est correctement sécurisé, généralement avec une icône de verrouillage. Si vous testez votre serveur à l'aide du test de serveur SSL Labs, il obtiendra une note A.

Terminons maintenant en testant le processus de renouvellement.

Vérification du renouvellement automatique de Certbot

Les certificats de Let's Encrypt ne sont valables que pendant quatre-vingt-dix jours. Il s'agit d'encourager les utilisateurs à automatiser leur processus de renouvellement de certificat. L’outil certbot que nous avons installé peut s'en charger pour nous en ajoutant une minuterie systemd qui s'exécutera deux fois par jour et renouvellera automatiquement tout certificat dans les trente jours suivant son expiration.

Vous pouvez interroger l'état du minuteur avec systemctl :

sudo systemctl status certbot.timer

image_4_FAgQYo_dz.png

Pour tester le processus de renouvellement, vous pouvez faire un essai avec certbot :

sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes prêt. Si nécessaire, Certbot renouvellera vos certificats et rechargera Nginx pour prendre en compte les modifications. Si le processus de renouvellement automatisé échoue, Let's Encrypt enverra un message à l'e-mail que vous avez spécifié, vous avertissant lorsque votre certificat est sur le point d'expirer.

Conclusion

Dans ce tutoriel, je vous ai présenté 2 entités importantes à la mise en place de certificats SSL qui sont « Let’s encrypt » et « Certbot ». Nous avons installé le client certbot de Let's Encrypt, téléchargé des certificats SSL pour notre domaine, configuré Nginx pour utiliser ces certificats et configuré le renouvellement automatique des certificats. Si vous avez d'autres questions sur l'utilisation de Certbot, la documentation officielle est un bon point de départ.

Voici un tutoriel pour savoir comment installer certbot sur Debian 11.

Si vous êtes Ubuntu, vous pouvez jeter un œil sur ce tutoriel qui vous montre étape par étape comment faire pour obtenir de certificats SSL.

Autre tutoriel intéressant pour savoir comment installer un serveur nginx sur ubuntu.

Publié le 06/07/2023