SSL Certificates - Certbot

Certificats SSL

Certbot est une solution gratuite pour l’émission de certificats SSL/TLS via Let’s Encrypt, qui permet une connexion HTTPS sécurisée pour les sites web. Par rapport aux fournisseurs payants, qui impliquent souvent un travail administratif supplémentaire et des coûts récurrents, Certbot offre une alternative automatisée et gratuite qui simplifie la gestion des certificats et prend en charge les renouvellements continus.

Installation

Il est recommandé d’installer Certbot → nativement sur l’hôte, d’obtenir des certificats une fois via Certbot et de l’intégrer en tant que volume dans le conteneur nginx.

1. Installer Certbot

Prérequis: → ALMA / Rocky Linux comme hôte → Docker installé selon les instructions → Relution configuré selon les instructions

Certbot peut être installé avec la commande suivante

sudo dnf install epel-release -y
sudo dnf install certbot -y

2. Arrêter Nginx

Nginx doit être arrêté temporairement car Certbot en mode --standalone démarre brièvement son propre serveur web sur le port 80.

docker stop docker_nginx

3. Créer un certificat

Démarrez Certbot et suivez les instructions de l’assistant.

sudo certbot certonly --standalone -d example.com

4. Ajuster le chemin du certificat

Dans docker-compose.yml, le chemin vers les certificats SSL créés doit être ajusté.

services :
  nginx :
  ...
    volumes :
     - '/etc/letsencrypt/live/<example.com>/fullchain.pem:/etc/nginx/server.pem'
     - '/etc/letsencrypt/live/<example.com>/privkey.pem:/etc/nginx/server.key'

Important: Si Nginx est démarré avec les volumes (chemin vers les certificats) dans le fichier docker-compose.yml et que les certificats ne sont pas présents, Docker créera des dossiers au lieu de fichiers. Ces dossiers doivent être supprimés pour que les certificats puissent être créés au démarrage de Docker.

5. Démarrer le conteneur Docker

Si les certificats sont créés avec succès, tous les conteneurs peuvent être démarrés et vérifiés.

docker compose up --detach
docker ps

6. Pré- et post-hooks

Pour le renouvellement, des pre- et post-hooks peuvent être configurés dans Certbot pour arrêter puis redémarrer le conteneur nginx. Les hooks ne sont exécutés que si Certbot détermine, lors de l’appel à Renwal, que les certificats doivent effectivement être remplacés. Certbot est généralement configuré pour s’exécuter deux fois par jour et vérifier si un remplacement est nécessaire. Les certificats sont valables pendant 90 jours.

En fonction du système hôte, Certbot devrait déjà mettre en place automatiquement un renouvellement (par exemple sous la forme d’un service systemd + timer). L’appel peut alors être étendu en conséquence par ces crochets, par exemple

ExecStart=/usr/bin/certbot [--dry-run] -q renew --pre-hook "..." --post-hook "..."

Les pre- et post-hooks seraient alors en conséquence :

--pre-hook "/usr/bin/docker compose -f /opt/relution/docker-compose.yml down nginx"
--post-hook "/usr/bin/docker compose -f /opt/relution/docker-compose.yml up --detach nginx"

Les hooks peuvent également pointer vers des fichiers de script qui contiennent l’appel réel, ce qui est généralement plus clair.

Important: Lorsque vous l’essayez pour la première fois, vous devriez toujours utiliser --dry-run afin que Let’s Encrypt ne soit pas bloqué pendant plusieurs jours par un trop grand nombre de tentatives ratées. Dans un environnement productif, cela doit bien sûr être supprimé, sinon il n’y aura pas de certificat.