Ci-dessous, les différences entre deux révisions de la page.
Both sides previous revision Révision précédente Prochaine révision | Révision précédente Prochaine révision Both sides next revision | ||
si:acme-dns [2018/12/25 17:22] pitchum [Configurer Bind pour les mises à jour dynamiques] |
si:acme-dns [2018/12/25 17:35] pitchum [Certificat Wildcard avec dehydrated] |
||
---|---|---|---|
Ligne 105: | Ligne 105: | ||
===== Certificat Wildcard avec dehydrated ===== | ===== Certificat Wildcard avec dehydrated ===== | ||
+ | Sur la machine ayant besoin d'un certificat Wildcard (ici la machine xmpp-1 hébergeant ejabberd) créer le fichier ///etc/parinux/rndc-acme.key// contenant la même clef secrète que sur le serveur Bind : | ||
+ | |||
+ | <file etc/parinux/rndc-acme.key> | ||
+ | key "rndc-acme" { | ||
+ | algorithm hmac-sha512; | ||
+ | secret "cZh3zV8Uf7aIOxjv8ZA8iA=="; | ||
+ | }; | ||
+ | </file> | ||
+ | |||
+ | <code>sudo apt install dehydrated dnsutils ntp</code> | ||
+ | |||
+ | Temporairement, le temps de tester la configuration on va utiliser le serveur ACME de staging. | ||
+ | |||
+ | <code>echo 'CA="https://acme-staging.api.letsencrypt.org/directory"' | sudo tee /etc/dehydrated/conf.d/staging.sh</code> | ||
+ | |||
+ | On configure dehydrated pour faire de la validation DNS-01 dans le fichier ///etc/dehydrated/conf.d/auth-dns.conf// : | ||
+ | |||
+ | <file> | ||
+ | CHALLENGETYPE="dns-01" | ||
+ | HOOK=/etc/dehydrated/hook-custom.sh | ||
+ | </file> | ||
+ | |||
+ | On créé le script hook ///etc/dehydrated/hook-custom.sh// : | ||
+ | |||
+ | <file> | ||
+ | #!/usr/bin/env bash | ||
+ | |||
+ | set -e | ||
+ | set -u | ||
+ | set -o pipefail | ||
+ | |||
+ | NSUPDATE="nsupdate -k /etc/parinux/rndc-acme.key" | ||
+ | DNSSERVER="192.168.2.55" # l'IP de troll4, le serveur DNS master | ||
+ | TTL=300 | ||
+ | |||
+ | case "$1" in | ||
+ | "deploy_challenge") | ||
+ | printf "server %s\nupdate add _acme-challenge.%s. %d in TXT \"%s\"\nsend\n" "${DNSSERVER}" "${2}" "${TTL}" "${4}" | $NSUPDATE | ||
+ | ;; | ||
+ | "clean_challenge") | ||
+ | printf "server %s\nupdate delete _acme-challenge.%s. %d in TXT \"%s\"\nsend\n" "${DNSSERVER}" "${2}" "${TTL}" "${4}" | $NSUPDATE | ||
+ | ;; | ||
+ | "deploy_cert") | ||
+ | # optional: | ||
+ | # /path/to/deploy_cert.sh "$@" | ||
+ | ;; | ||
+ | "unchanged_cert") | ||
+ | # do nothing for now | ||
+ | ;; | ||
+ | "startup_hook") | ||
+ | # do nothing for now | ||
+ | ;; | ||
+ | "exit_hook") | ||
+ | # do nothing for now | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
+ | </file> | ||
+ | |||
+ | Il faut rendre ce script exécutable : | ||
+ | |||
+ | <code>sudo chmod +x /etc/dehydrated/hook-custom.sh</code> | ||
+ | |||
+ | On indique le ou les domaines qu’on souhaite dans ///etc/dehydrated/domains.txt// : | ||
+ | |||
+ | <file /etc/dehydrated/domains.txt> | ||
+ | parinux.org *.parinux.org | ||
+ | </file> | ||
+ | |||
+ | La première fois : | ||
+ | |||
+ | dehydrated --register --accept-terms | ||
+ | |||
+ | Puis on génère ou régénère les certificats : | ||
+ | |||
+ | dehydrated -c | ||
+ | |||
+ | Si tout s'est bien passé, alors pour peut générer un vrai certificat cette fois en supprimant le fichier ///etc/dehydrated/conf.d/staging.sh// : | ||
+ | |||
+ | <code> | ||
+ | rm /etc/dehydrated/conf.d/staging.sh | ||
+ | dehydrated --register --accept-terms | ||
+ | dehydrated -c | ||
+ | </code> | ||
+ | |||
+ | Il faut maintenant créer une tâche cron pour renouveler le certificat automatiquement. | ||
+ | On créé le fichier ///etc/cron.weekly/acme-renew// suivant : | ||
+ | |||
+ | <file /etc/cron.weekly/acme-renew> | ||
+ | #! /bin/bash | ||
+ | /usr/bin/dehydrated -c | ||
+ | </file> | ||
+ | |||
+ | Et on le rend exécutable : | ||
+ | |||
+ | <code>chmod +x /etc/cron.weekly/acme-renew</code> |