Serveurs web

Installation d'un certificat Let's Encrypt sur son serveur nginx

Dernière mise à jour : 13/07/2023 à 13h33
Table des matières

Introduction



Comme décrit dans un article précédent, j'utilise un serveur nginx pour faire du reverse proxy. Je vais vous présenter ici comment mettre en place un certificat auto-signé Let's Encrypt sur ce serveur.

Etapes préliminaires



Paramétrage de sa box



En premier lieu, il est nécessaire de rediriger les ports 80 et 443 de sa box vers le serveur web nginx. Je vous met ici pour exemple à quoi cela ressemble sur ma box SFR (les lignes 1 et 3 correspondent aux redirections en question).

screenshot_ports_sfr_box

Désactivation des redirections



Afin de s'assurer de ne pas rediriger les requêtes en http vers https automatiquement (nous verrons cela par la suite), il est nécessaire de désactiver les sites activés. Plusieurs solutions sont possibles, je vous en propose une :

Code BASH :
 
cd /etc/nginx/sites-enabled
 


Code BASH :
 
find . -type l -exec mv {} {}.tmp \;
 


Les fichiers de conf seront renommés en .tmp et ne seront donc plus pris en compte par nginx

Ajouter une ligne dans le fichier suivant :

Code BASH :
 
vim  /etc/nginx/proxy_params
 


Ajouter la ligne :

Code TEXT :
 
proxy_redirect          off;
 


On redémarre le serveur web pour prendre en compte les paramétrages :

Code BASH :
 
nginx -s reload
 


Installation du certificat



Création du certificat



Installer certbot :

Code BASH :
 
sudo apt install certbot
 


Exécuter certbot :

Code BASH :
 
certbot certonly -d jeedom.mondomaine.fr,plex.mondomaine.fr,nas.mondomaine.fr
 



L'option -d permet de spécifier le ou les domaines séparés par des virgules


Reconfiguration du serveur web


Une fois le certificat installé, on remet en place les fichiers de configuration. On peut le faire avec la commande suivante ou manuellement si on a peu de fichiers de configuration :

Code BASH :
 
find . -name "*.tmp" -exec sh -c 'mv "$1" "${1%.tmp}"' _ {} \;
 


Recharger le serveur web :

Code BASH :
 
nginx -s reload
 


Pour ajouter un domaine ou un sous-domaine



Si vous souhaitez ajouter un domaine ou un sous-domaine à votre certificat, c'est possible avec la commande suivante :

Code BASH :
 
certbot certonly --expand -d jeedom.mondomaine.fr,nas.mondomaine.fr,plex.mondomaine.fr,nextcloud.mondomaine.fr
 



Il est nécessaire dans la commande de remettre les domaines et sous-domaines déjà certifiés


Renouveller le certificat



Les certificats Let's Encrypt sont gratuits mais leur inconvénient est qu'ils ne sont valables que 3 mois, il faut donc les renouveler. Si vous avez entré votre adresse mail lors de la création du certificat, vous recevrez plusieurs mails dans les semaines qui précèdent leur expiration.

Pour renouveler le certificat :

Code BASH :
 
certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
 


Il est possible d'automatiser cette tâche avec cron, je vous renvoi vers des articles qui traitent de cron. Cependant, je vous recommande de tester une fois ou deux le renouvellement manuel afin de vérifier que cela fonctionne.

Obtenir des informations sur les certificats installés



Il est possible d'obtenir des informations sur le certificat installé (noms de domaines et sous-domaines, date de validité,...) :

Code BASH :
 
certbot certificates
 


Conclusion



Vous pouvez trouver d'avantages d'information sur la commande certbot et toutes ses options (elles sont nombreuses) : User Guide - Certbot
Cette page a été vue 239 fois