INFO : veuillez noter que cet article ne s’applique pas aux versions 4.7 et au delà de BlueMind.
L’activité du jour : la mise en place d’un certificat Let’s Encrypt sur notre serveur de mail BlueMind en version 3.5.
L’intérêt
Let’s Encrypt permet de disposer d’un certificat gratuit et reconnu par les navigateurs. L’intérêt principal (dans l’esprit DevOps) est d’automatiser le processus de gestion des certificats parfois complexe.
Tout est automatique : la création, l’installation et surtout le renouvellement du certificat. Une fois mis en place, on peut l’oublier et le laisser se débrouiller tout seul.
Préparation du serveur web
Avant de générer un certificat, le serveur Let’s Encrypt va vérifier que le nom DNS du certificat vous appartient bien.
Le serveur va demander au client Let’s Encrypt de positionner une ressource à l’URL /.well-known/acme-challenge/ de votre serveur BlueMind. Il faut donc adapter la configuration du serveur nginx BlueMind pour permettre cet échange.
Pour plus d’informations sur le fonctionnement du protocole, vous pouvez consulter la page https://letsencrypt.org/how-it-works/
Le serveur web nginx BlueMind permet d’ajouter des fichiers de configuration qui ne seront pas écrasés lors de mises à jour dans le répertoire /etc/nginx/bm-local.d/. Le contenu des échanges avec le serveur Let’s Encrypt sera contenu dans le répertoire /var/www/letsencrypt sur le serveur :
- Le fichier /etc/nginx/bm-local.d/letsencrypt-acme-challenge.conf est ajouté avec le contenu suivant :
location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /var/www/letsencrypt; }
- Enfin le serveur NGINX doit être redémarré (exemple sur Ubuntu 16.04) :
systemctl reload bm-nginx
Génération du certificat
La 1ère étape est d’installer le client Let’s Encrypt certbot-auto :
sudo curl https://dl.eff.org/certbot-auto > /opt/letsencrypt/certbot-auto sudo chmod +x /opt/letsencrypt/certbot-auto
La génération du certificat nécessite de fournir quelques informations :
- L’acceptation des conditions d’utilisation
- Le chemin pour déposer les ressources du challenge ACME
- Le nom de domaine pour lequel le certificat est généré (potentiellement plusieurs)
- L’adresse e-mail pour recevoir les notifications d’expiration et autres
Dans un souci d’automatisation, ces informations sont passées directement en ligne de commande et sans interactions (-n). Au 1er lancement, certbot-auto va installer automatiquement ses dépendances.
sudo ./certbot-auto certonly -n -a webroot --webroot-path=/var/www/letsencrypt -d <FQDN du serveur BM> -m <votre e-mail> --agree-tos
Si tout se passe bien, le certificat et les clés sont générés dans le repertoire /etc/letsencrypt/live/<FQDN du serveur BM>/
Installation du certificat dans l’environnement BlueMind
Maintenant que le certificat est généré, il faut configurer NGINX pour l’utiliser. Pour rester le plus transparent possible au niveau de BlueMind et éviter de tout casser lors des mises à jour, l’option choisie consiste à ré-écrire le certificat utilisé par BlueMind. Attention : pensez à sauver son ancien certificat si besoin.
Le script suivant va permettre de faire cette modification (il sera également utilisé pour le renouvellement) :
#!/bin/bash cat /etc/letsencrypt/live/fqdn/privkey.pem /etc/letsencrypt/live/fqdn/fullchain.pem > /etc/ssl/certs/bm_cert.pem systemctl reload postfix systemctl reload bm-nginx
Ça y est, le serveur BlueMind est à présent sécurisé par un certificat reconnu !
Automatisation du renouvellement
Les certificats Let’s Encrypt ont une faible durée de vie (3 mois) mais tout est prévu dans le client pour leur renouvellement. De plus, certbot-auto permet de lancer une commande en cas de renouvellement réussi, ce qui va permettre d’appeler automatiquement le script précédent.
Une entrée crontab est ajoutée pour automatiser tout le processus :
0 0 * * 0 /opt/letsencrypt/certbot-auto renew --renew-hook "bash letsencrypt_posthook.sh" >> /var/log/letsencrypt/renew.log
Voilà, vous pouvez tranquillement passer à autre chose.
Article rédigé et publié par Julien Lavesque pour Obectif Libre