by thenoiser
Renouveler manuellement le certificat SSL/TLS Let's Encrypt utilisé par Nginx pour radio.example.org:8000, sans interrompre Icecast.
<note important> Ce tutoriel concerne un certificat Let's Encrypt créé en mode manuel DNS-01 (challenge DNS) avec Gandi. Dans ce mode, le renouvellement n'est pas automatique (sans script/hook). </note>
* Domaine : radio.example.org
* Certificat utilisé par Nginx :
/etc/letsencrypt/live/radio.example.org/fullchain.pem/etc/letsencrypt/live/radio.example.org/privkey.pem
* Nginx sert le HTTPS sur le port 8000
* Icecast tourne en local (proxy derrière Nginx)
* Validation Let's Encrypt par TXT DNS : _acme-challenge.radio.example.org
sudo certbot certificates
Vérifier notamment :
* Certificate Name: radio.example.org
* Expiry Date: …
sudo certbot certonly \ --manual \ --preferred-challenges dns \ --key-type ecdsa \ -d radio.example.org
Certbot affiche alors :
* le nom du TXT à créer : _acme-challenge.radio.example.org
* une valeur TXT (chaîne aléatoire) à copier
<note warning> La valeur change à chaque tentative. Si une tentative échoue, il faut remplacer l'ancienne valeur TXT par la nouvelle valeur affichée par Certbot. </note>
Dans l'interface DNS Gandi de example.org :
* Type : TXT
* Nom : _acme-challenge.radio
* Valeur : (la chaîne fournie par Certbot)
* TTL : 300 (recommandé)
<note tip>
Dans la zone DNS example.org, le nom _acme-challenge.radio correspond au FQDN _acme-challenge.radio.example.org.
</note>
Avant d'appuyer sur Entrée dans Certbot, vérifier que le TXT est bien visible publiquement.
dig +short TXT _acme-challenge.radio.example.org @8.8.8.8
Ou :
nslookup -type=TXT _acme-challenge.radio.example.org 8.8.8.8
Le résultat doit afficher exactement la valeur demandée par Certbot.
Exemple :
"CG6n8bpQEakfUmjM3EMZsOzxGOl2cwOFkAtsgpMuGBc"
<note important> N'appuyer sur Entrée dans Certbot qu'après avoir vérifié la bonne valeur TXT. </note>
Revenir dans le terminal où Certbot attend et appuyer sur Entrée.
Si tout est correct, message attendu :
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/radio.example.org/fullchain.pem Key is saved at: /etc/letsencrypt/live/radio.example.org/privkey.pem
sudo nginx -t sudo systemctl reload nginx
<note> Icecast n'a pas besoin d'être redémarré pour cette opération. Seul Nginx doit être rechargé. </note>
sudo certbot certificates
La date d'expiration doit être repoussée (environ 90 jours).
Cause fréquente :
* ancienne valeur TXT encore présente * nouvelle tentative Certbot = nouvelle valeur * validation trop rapide
Solution :
* remplacer la valeur TXT par la nouvelle
* vérifier avec dig
* puis appuyer sur Entrée
Erreur typique :
The manual plugin is not working... An authentication script must be provided with --manual-auth-hook
C'est normal avec un certificat créé en mode manuel DNS-01 sans hook.
sudo certbot certificates
sudo certbot certonly \ --manual \ --preferred-challenges dns \ --key-type ecdsa \ -d radio.example.org
* Mettre à jour le TXT _acme-challenge.radio dans Gandi
* Vérifier la propagation DNS :
dig +short TXT _acme-challenge.radio.example.org @8.8.8.8
* Appuyer sur Entrée dans Certbot * Recharger Nginx :
sudo nginx -t && sudo systemctl reload nginx
* Vérifier :
sudo certbot certificates
* Automatiser le DNS-01 avec l'API Gandi (hook Certbot ou plugin DNS) * Ajouter un reload Nginx automatique après renouvellement * Mettre en place un contrôle périodique (cron/systemd timer)