article:linux:certificat_let_s_encrypt_wildcard_avec_challenge_dns
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| article:linux:certificat_let_s_encrypt_wildcard_avec_challenge_dns [2026/04/25 00:02] – créée Gary | article:linux:certificat_let_s_encrypt_wildcard_avec_challenge_dns [2026/04/26 01:02] (Version actuelle) – Gary | ||
|---|---|---|---|
| Ligne 4: | Ligne 4: | ||
| * Indépendant d'un serveur web (nginx, apache, ...): Afin de pouvoir réutiliser les certificats librement et sur plusieurs services | * Indépendant d'un serveur web (nginx, apache, ...): Afin de pouvoir réutiliser les certificats librement et sur plusieurs services | ||
| * Wildcard (*.mondomain.tld) et domaine de base: Ainsi pas besoin de rejouer la certification à chaque nouveau service | * Wildcard (*.mondomain.tld) et domaine de base: Ainsi pas besoin de rejouer la certification à chaque nouveau service | ||
| - | * Challenge | + | * Challenge |
| * Que notre serveur de base fournisse une API ou pas, on ne s'en préoccupe pas | * Que notre serveur de base fournisse une API ou pas, on ne s'en préoccupe pas | ||
| - | * La clé API utilisé | + | * La clé API utilisée |
| Le programme fournira en sortie les certificats *.mondomain.tld et mondomain.tld. On pourra faire pointer nos services directement dessus ou les fournir aux différents serveurs. | Le programme fournira en sortie les certificats *.mondomain.tld et mondomain.tld. On pourra faire pointer nos services directement dessus ou les fournir aux différents serveurs. | ||
| - | Note: Un certificat Let's Encrypt a une durée de vie de 90 jours. Il est généralement | + | Note: Un certificat Let's Encrypt a une durée de vie de 90 jours (64 jours à partir de 2027 puis 45 jours en 2028). Il est généralement |
| ===== Préparation du système ===== | ===== Préparation du système ===== | ||
| <code bash> | <code bash> | ||
| - | apt install python3 python3-venv | + | apt install python3 python3-venv |
| </ | </ | ||
| Ligne 25: | Ligne 25: | ||
| </ | </ | ||
| - | '' | + | '' |
| '' | '' | ||
| '' | '' | ||
| - | '' | + | '' |
| L' | L' | ||
| Ligne 34: | Ligne 34: | ||
| Le groupe '' | Le groupe '' | ||
| - | Le dossier de travail sera ''/ | + | Le dossier de travail sera ''/ |
| <code bash> | <code bash> | ||
| Ligne 58: | Ligne 58: | ||
| * Dans la partie DNS du projet, vous ajoutez votre nom de domaine | * Dans la partie DNS du projet, vous ajoutez votre nom de domaine | ||
| * **Note**: Il indiquera "It looks like your domain is pointing to different nameservers.", | * **Note**: Il indiquera "It looks like your domain is pointing to different nameservers.", | ||
| - | * Créer | + | * Créer |
| * Dans la partie Security > API tokens, vous aurez besoin d'une clé API avec accès en écriture (Read/ | * Dans la partie Security > API tokens, vous aurez besoin d'une clé API avec accès en écriture (Read/ | ||
| ==== Fichier de configuration ==== | ==== Fichier de configuration ==== | ||
| - | On va réunir la configuration | + | On va réunir la configuration |
| <code bash .env> | <code bash .env> | ||
| + | # Domaine à certifier | ||
| DOMAIN=" | DOMAIN=" | ||
| + | # Token généré chez Hetzner | ||
| TOKEN=" | TOKEN=" | ||
| + | # Adresse de contact pour Let's Encrypt en cas de besoin | ||
| + | EMAIL=" | ||
| </ | </ | ||
| Ligne 76: | Ligne 80: | ||
| <code bash / | <code bash / | ||
| # | # | ||
| + | set -euo pipefail | ||
| + | |||
| + | set -a | ||
| + | source .env | ||
| + | set +a | ||
| - | curl " | + | curl -sS --fail-with-body |
| --request POST \ | --request POST \ | ||
| --header " | --header " | ||
| Ligne 96: | Ligne 105: | ||
| On n' | On n' | ||
| <code bash> | <code bash> | ||
| - | chmod +x hook-duckdns.sh | + | chmod +x hook-hetzner.sh |
| </ | </ | ||
| - | A noter que la variable '' | + | À noter que la variable '' |
| Pour valider le bon fonctionnement : | Pour valider le bon fonctionnement : | ||
| Ligne 135: | Ligne 144: | ||
| Il est recommandé (mais pas obligatoire) de nettoyer l' | Il est recommandé (mais pas obligatoire) de nettoyer l' | ||
| - | <code bash hook-hetzner.cleanup.sh> | + | <code bash hook-hetzner-cleanup.sh> |
| # | # | ||
| + | set -euo pipefail | ||
| - | curl " | + | set -a |
| - | --request | + | source .env |
| - | --header " | + | set +a |
| + | |||
| + | curl -sS --fail-with-body | ||
| + | --request | ||
| + | --header " | ||
| + | --header " | ||
| + | --data "{ | ||
| + | \" | ||
| + | { | ||
| + | \" | ||
| + | } | ||
| + | ] | ||
| + | | ||
| </ | </ | ||
| ==== Configuration du domaine principal ==== | ==== Configuration du domaine principal ==== | ||
| - | Le domaine principal doit pouvoir déléguer '' | + | Le domaine principal doit pouvoir déléguer '' |
| - | Sur votre console | + | Sur votre console |
| - | Chez votre registrar, vous devrez ajouter ces serveurs comme record | + | Chez votre registrar, vous devrez ajouter ces serveurs comme enregistrement |
| < | < | ||
| Ligne 167: | Ligne 189: | ||
| ===== Automatisation de Certbot ===== | ===== Automatisation de Certbot ===== | ||
| - | Tout est en place pour que Certbot puisse travailler. Le certificat | + | Tout est en place pour que Certbot puisse travailler. Le certificat |
| <code bash certbot-renew.sh> | <code bash certbot-renew.sh> | ||
| Ligne 193: | Ligne 215: | ||
| echo \> Renew \[*.\]${DOMAIN} | echo \> Renew \[*.\]${DOMAIN} | ||
| bin/certbot --config-dir " | bin/certbot --config-dir " | ||
| - | | + | |
| | | ||
| | | ||
| Ligne 203: | Ligne 225: | ||
| fi | fi | ||
| - | cp -rfL " | + | cp -rfL " |
| - | chmod 0640 " | + | chmod 0640 " |
| </ | </ | ||
| Ligne 216: | Ligne 238: | ||
| ==== Sécurisation du répertoire ==== | ==== Sécurisation du répertoire ==== | ||
| - | Mes tests ont été fait avec un utilisateur interactif par facilité. Mettons en place la sécurité nécessaire | + | Mes tests ont été faits avec un utilisateur interactif par facilité. Mettons en place la sécurité nécessaire |
| <code bash> | <code bash> | ||
| Ligne 227: | Ligne 249: | ||
| find . -type f -exec chmod 640 {} \; | find . -type f -exec chmod 640 {} \; | ||
| chmod 700 *.sh | chmod 700 *.sh | ||
| + | chmod 700 bin/certbot | ||
| chmod 600 .env | chmod 600 .env | ||
| Ligne 236: | Ligne 259: | ||
| ==== Crontab ==== | ==== Crontab ==== | ||
| - | Je trouve qu'une fois semaine est un bon compromis. Dès qu'il restera 30 jours au certificat, il sera au maximum dans les 7 prochains jours. | + | Je trouve qu'une fois par semaine est un bon compromis. Dès qu'il restera 30 jours au certificat, il sera au maximum dans les 7 prochains jours. |
| Certbot ne tentera rien si le certificat est trop récent. | Certbot ne tentera rien si le certificat est trop récent. | ||
| Ligne 245: | Ligne 268: | ||
| # Renouvellement certificat Let's Encrypt | # Renouvellement certificat Let's Encrypt | ||
| # Chaque dimanche à 2h14 | # Chaque dimanche à 2h14 | ||
| - | 14 2 * * 0 / | + | 14 2 * * 0 / |
| </ | </ | ||
| Ligne 252: | Ligne 275: | ||
| ===== Conclusion ===== | ===== Conclusion ===== | ||
| - | Le script n'est pas parfait, n'est pas hyper sécurisé et il y a forcément moyen de faire mieux/optimisé... | + | Le script n'est pas parfait, n'est pas hyper sécurisé et il y a forcément moyen de faire mieux/optimiser... |
| MAIS, je l' | MAIS, je l' | ||
| CEPENDANT ! Il ne dispense pas d'un monitoring de l' | CEPENDANT ! Il ne dispense pas d'un monitoring de l' | ||
article/linux/certificat_let_s_encrypt_wildcard_avec_challenge_dns.1777068153.txt.gz · Dernière modification : de Gary
