Certificat classique ou wildcard?
merci pour votre aide a tous
En exécutant l'installation d'une wildcard pour mon serveur, un message d'erreur s'affiche et je ne trouve pas de réponse sur internet:
[root@ns372331 xadmin]# acme.sh --renew -d mondomain.fr -d *.mondomain.fr --dns --force --yes-I-know-dns-manual-mode-enough-go-ahead-please
[ven. juin 15 16:02:14 CEST 2018] Renew: 'mondomain.fr'
[ven. juin 15 16:02:14 CEST 2018] Multi domain='DNS:mondomain.fr,DNS:*.mondomain.fr'
[ven. juin 15 16:02:14 CEST 2018] Getting domain auth token for each domain
[ven. juin 15 16:02:14 CEST 2018] Verifying:mondomain.fr
[ven. juin 15 16:02:15 CEST 2018] mondomain.fr:Challenge error: {"type":"urn:ietf:params:acme:error:malformed","detail":"Unable to update challenge :: The challenge is not pending.","status": 400}
[ven. juin 15 16:02:15 CEST 2018] Please add '--debug' or '--log' to check more details.
[ven. juin 15 16:02:15 CEST 2018] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
[ven. juin 15 16:02:16 CEST 2018] The dns manual mode can not renew automatically, you must issue it again manually. You'd better use the other modes instead.
Je n'arrive pas a trouver de réponse ni même d'ou vient l'erreur,
Puis-je avoir une petite aide?
- Modifié
Plop, pour les détails :
[ven. juin 15 16:02:15 CEST 2018] Please add '--debug' or '--log' to check more details.
- Modifié
[root@ns372331 xadmin]# acme.sh --renew -d mondomain.fr -d *.mondomain.fr --dns --force --yes-I-know-dns-manual-mode-enough-go-ahead-please --debug
[lun. juin 18 10:06:41 CEST 2018] Lets find script dir.
[lun. juin 18 10:06:41 CEST 2018] _SCRIPT_='/root/.acme.sh/acme.sh'
[lun. juin 18 10:06:41 CEST 2018] _script='/root/.acme.sh/acme.sh'
[lun. juin 18 10:06:41 CEST 2018] _script_home='/root/.acme.sh'
[lun. juin 18 10:06:41 CEST 2018] Using config home:/root/.acme.sh
https://github.com/Neilpang/acme.sh
v2.7.9
[lun. juin 18 10:06:41 CEST 2018] Using config home:/root/.acme.sh
[lun. juin 18 10:06:41 CEST 2018] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[lun. juin 18 10:06:41 CEST 2018] DOMAIN_PATH='/root/.acme.sh/mondomain.fr'
[lun. juin 18 10:06:41 CEST 2018] Renew: 'mondomain.fr'
[lun. juin 18 10:06:41 CEST 2018] Le_API='https://acme-v02.api.letsencrypt.org/directory'
[lun. juin 18 10:06:41 CEST 2018] Using config home:/root/.acme.sh
[lun. juin 18 10:06:41 CEST 2018] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[lun. juin 18 10:06:41 CEST 2018] _main_domain='mondomain.fr'
[lun. juin 18 10:06:41 CEST 2018] _alt_domains='*.mondomain.fr'
[lun. juin 18 10:06:41 CEST 2018] Using ACME_DIRECTORY: https://acme-v02.api.letsencrypt.org/directory
[lun. juin 18 10:06:41 CEST 2018] _init api for server: https://acme-v02.api.letsencrypt.org/directory
[lun. juin 18 10:06:41 CEST 2018] GET
[lun. juin 18 10:06:41 CEST 2018] url='https://acme-v02.api.letsencrypt.org/directory'
[lun. juin 18 10:06:41 CEST 2018] timeout=
[lun. juin 18 10:06:41 CEST 2018] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header -g '
[lun. juin 18 10:06:42 CEST 2018] ret='0'
[lun. juin 18 10:06:42 CEST 2018] ACME_KEY_CHANGE='https://acme-v02.api.letsencrypt.org/acme/key-change'
[lun. juin 18 10:06:42 CEST 2018] ACME_NEW_AUTHZ
[lun. juin 18 10:06:42 CEST 2018] ACME_NEW_ORDER='https://acme-v02.api.letsencrypt.org/acme/new-order'
[lun. juin 18 10:06:42 CEST 2018] ACME_NEW_ACCOUNT='https://acme-v02.api.letsencrypt.org/acme/new-acct'
[lun. juin 18 10:06:42 CEST 2018] ACME_REVOKE_CERT='https://acme-v02.api.letsencrypt.org/acme/revoke-cert'
[lun. juin 18 10:06:42 CEST 2018] ACME_AGREEMENT='https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf'
[lun. juin 18 10:06:42 CEST 2018] ACME_NEW_NONCE='https://acme-v02.api.letsencrypt.org/acme/new-nonce'
[lun. juin 18 10:06:42 CEST 2018] ACME_VERSION='2'
[lun. juin 18 10:06:42 CEST 2018] Le_NextRenewTime
[lun. juin 18 10:06:42 CEST 2018] _on_before_issue
[lun. juin 18 10:06:42 CEST 2018] _chk_main_domain='mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] _chk_alt_domains='*.mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] Le_LocalAddress
[lun. juin 18 10:06:42 CEST 2018] d='mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] Check for domain='mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] _currentRoot='dns'
[lun. juin 18 10:06:42 CEST 2018] d='*.mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] Check for domain='*.mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] _currentRoot='dns'
[lun. juin 18 10:06:42 CEST 2018] d
[lun. juin 18 10:06:42 CEST 2018] _saved_account_key_hash is not changed, skip register account.
[lun. juin 18 10:06:42 CEST 2018] Read key length:
[lun. juin 18 10:06:42 CEST 2018] _createcsr
[lun. juin 18 10:06:42 CEST 2018] Multi domain='DNS:mondomain.fr,DNS:*.mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] Getting domain auth token for each domain
[lun. juin 18 10:06:42 CEST 2018] ok, let's start to verify
[lun. juin 18 10:06:42 CEST 2018] Verifying:mondomain.fr
[lun. juin 18 10:06:42 CEST 2018] d='mondomain.fr'
[lun. juin 18 10:06:42 CEST 2018] keyauthorization='w2X4L7vL4bk_W9c65FHYJD0fZGoQe3O8WFOh6cdaR24.agumNnwu76rYDLM8vzlwZ8usRfIYHvBzCBV1hGE0xMw'
[lun. juin 18 10:06:42 CEST 2018] uri='https://acme-v02.api.letsencrypt.org/acme/challenge/EIX7ocQ9aI8qOf5I22TMj76_UXCj4fEKKXB5NuJ9fY8/5130426156'
[lun. juin 18 10:06:42 CEST 2018] _currentRoot='dns'
[lun. juin 18 10:06:42 CEST 2018] url='https://acme-v02.api.letsencrypt.org/acme/challenge/EIX7ocQ9aI8qOf5I22TMj76_UXCj4fEKKXB5NuJ9fY8/5130426156'
[lun. juin 18 10:06:42 CEST 2018] payload='{"keyAuthorization": "w2X4L7vL4bk_W9c65FHYJD0fZGoQe3O8WFOh6cdaR24.agumNnwu76rYDLM8vzlwZ8usRfIYHvBzCBV1hGE0xMw"}'
[lun. juin 18 10:06:42 CEST 2018] RSA key
[lun. juin 18 10:06:42 CEST 2018] HEAD
[lun. juin 18 10:06:42 CEST 2018] _post_url='https://acme-v02.api.letsencrypt.org/acme/new-nonce'
[lun. juin 18 10:06:42 CEST 2018] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header -g '
[lun. juin 18 10:06:42 CEST 2018] _ret='0'
[lun. juin 18 10:06:42 CEST 2018] POST
[lun. juin 18 10:06:42 CEST 2018] _post_url='https://acme-v02.api.letsencrypt.org/acme/challenge/EIX7ocQ9aI8qOf5I22TMj76_UXCj4fEKKXB5NuJ9fY8/5130426156'
[lun. juin 18 10:06:42 CEST 2018] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header -g '
[lun. juin 18 10:06:43 CEST 2018] _ret='0'
[lun. juin 18 10:06:43 CEST 2018] code='400'
[lun. juin 18 10:06:43 CEST 2018] mondomain.fr:Challenge error: {"type":"urn:ietf:params:acme:error:malformed","detail":"Unable to update challenge :: The challenge is not pending.","status": 400}
[lun. juin 18 10:06:43 CEST 2018] Skip for removelevel:
[lun. juin 18 10:06:43 CEST 2018] pid
[lun. juin 18 10:06:43 CEST 2018] No need to restore nginx, skip.
[lun. juin 18 10:06:43 CEST 2018] _clearupdns
[lun. juin 18 10:06:43 CEST 2018] skip dns.
[lun. juin 18 10:06:43 CEST 2018] _on_issue_err
[lun. juin 18 10:06:43 CEST 2018] Please add '--debug' or '--log' to check more details.
[lun. juin 18 10:06:43 CEST 2018] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
[lun. juin 18 10:06:43 CEST 2018] url='https://acme-v02.api.letsencrypt.org/acme/challenge/EIX7ocQ9aI8qOf5I22TMj76_UXCj4fEKKXB5NuJ9fY8/5130426156'
[lun. juin 18 10:06:43 CEST 2018] payload='{"keyAuthorization": "w2X4L7vL4bk_W9c65FHYJD0fZGoQe3O8WFOh6cdaR24.agumNnwu76rYDLM8vzlwZ8usRfIYHvBzCBV1hGE0xMw"}'
[lun. juin 18 10:06:43 CEST 2018] POST
[lun. juin 18 10:06:43 CEST 2018] _post_url='https://acme-v02.api.letsencrypt.org/acme/challenge/EIX7ocQ9aI8qOf5I22TMj76_UXCj4fEKKXB5NuJ9fY8/5130426156'
[lun. juin 18 10:06:43 CEST 2018] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header -g '
[lun. juin 18 10:06:43 CEST 2018] _ret='0'
[lun. juin 18 10:06:43 CEST 2018] code='400'
[lun. juin 18 10:06:43 CEST 2018] url='https://acme-v02.api.letsencrypt.org/acme/challenge/0jcPh5_Rse3dIJpGThObvtZ3QQUOgbTpvxrBDBZRvXQ/5130426154'
[lun. juin 18 10:06:43 CEST 2018] payload='{"keyAuthorization": "Hh77xu0KTwdt74LvGebjJU5U_TMecZ0y9jap4_3gURE.agumNnwu76rYDLM8vzlwZ8usRfIYHvBzCBV1hGE0xMw"}'
[lun. juin 18 10:06:43 CEST 2018] POST
[lun. juin 18 10:06:43 CEST 2018] _post_url='https://acme-v02.api.letsencrypt.org/acme/challenge/0jcPh5_Rse3dIJpGThObvtZ3QQUOgbTpvxrBDBZRvXQ/5130426154'
[lun. juin 18 10:06:43 CEST 2018] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header -g '
[lun. juin 18 10:06:43 CEST 2018] _ret='0'
[lun. juin 18 10:06:43 CEST 2018] code='400'
[lun. juin 18 10:06:43 CEST 2018] The dns manual mode can not renew automatically, you must issue it again manually. You'd better use the other modes instead.
voila, désoler du retard Aerya
- Modifié
Bonjour à tous
J'utilise le serveur DNS autoritaire avec NSD/DNSSEC via Docker de Hardware, et dans le fichier de zone figure mes enregistrement DANE/TLSA.
Mes certificats arrivant à expiration je me pose les questions suivantes. Bien que mon registrar soit Gandi, mon fichier zone est en local sur mon serveur, du coup, me semble t-il je ne peux pas utiliser l'api Gandi pour l'insertion de l'enregistrement TXT, enfin je crois
Dans ces conditions est ce que l'implantation du wildcard en renouvellement est possible ? Par ailleurs et j'en profite pour vous demander si avez vous un script pour renouveler les enregistrement TLSA lorsque les certificats letsencrypt sont renouvelés et enfin @Hardware parle dans son github de mettre en place un cron pour incrémenter le numéro de série du fichier de zone et pour la signature DNSSEC qui doit être effectuées tous les mois. Quelle commande cron pourrait être adaptée ?
https://github.com/hardware/nsd-dnssec
Merci
Un tutoriel tout frais pour toi https://mondedie.fr/d/10315-tuto-certificat-wildcard-lets-encrypt-sur-un-domaine-heberge-par-ovh
- Modifié
laster13 Pour le script je dois avoir ça sous la main mais c'est dans un de mes anciens backups...
Après c'est pas compliqué à faire .
Pour ce qui est d'incrémenter le numéro de série c'est à coups de sed et compagnie une fois que t'as extrait le numéro de la zone. Ensuite tu script pour faire en sorte de récupérer l'empreinte du certificat et tu remplaces l'ancien enregistrement (moi je me cassais pas la tête je récupérais l'empreinte de l'ancien certificat puis je faisais un bon vieux sed). En tous cas je l'avais bricolé comme ça et ça fonctionnait, maintenant que j'utilise traefik qui gère aussi mes certificats je dois un peu modifier mon truc.
L'entrée cron était sur l'hôte, de toute façon la seule commande Docker à faire était le signzone
à la fin. Je pourrais songer à PR (ou laisser faire Hardware) pour que ce soit intégré mais en tout cas c'est faisable comme cela.
- Modifié
Wonderfall Merci je vais creuser la commande sed.
- Modifié
Pour mondedie.fr, j'ai organisé le renouvellement de la manière suivante (à noter que dans notre cas, le serveur web et le serveur mail ne sont pas hébergés sur la même machine, donc j'ai du utiliser rsync et ssh) :
acme.sh \
--issue \
-w /mnt/docker/nginx/www/acme \
-k 4096 \
-d mondedie.fr \
-d www.mondedie.fr \
...
acme.sh \
--install-cert -d mondedie.fr \
--cert-file /mnt/docker/nginx/ssl/live/mondedie.fr/cert.pem \
--key-file /mnt/docker/nginx/ssl/live/mondedie.fr/privkey.pem \
--ca-file /mnt/docker/nginx/ssl/live/mondedie.fr/chain.pem \
--fullchain-file /mnt/docker/nginx/ssl/live/mondedie.fr/fullchain.pem \
--reloadcmd "docker-compose -f /docker/docker-compose.yml restart nginx && /usr/local/bin/update-mail-tlsa"
#!/bin/bash
# /usr/local/bin/update-mail-tlsa sur mondedie-web
DOMAIN="mondedie.fr"
LETS_ENCRYPT_LIVE_PATH="/mnt/docker/nginx/ssl/live/${DOMAIN}"
SLACK_HOOK=https://hooks.slack.com/services/xxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxx
# Empreinte du certificat récupérée lors du renouvellement
# par acme.sh à partir de mondedie-web
fingerprint=$(openssl x509 -noout -in "${LETS_ENCRYPT_LIVE_PATH}/cert.pem" -fingerprint -sha256 | cut -c 20- | sed s/://g)
# Mise à jour des certificats du serveur mail
# Seul l'@IP de mondedie-web est autorisée à se connecter avec une clé SSH via l'utilisateur root sur mondedie-mail
rsync -Lvr "${LETS_ENCRYPT_LIVE_PATH}/" root@mondedie-mail.lan:"/mnt/docker/ssl/letsencrypt/live/mail.${DOMAIN}"
# Redémarrage du serveur mail suite au renouvellement des certificats
ssh root@mondedie-mail.lan docker-compose -f /docker/docker-compose.yml restart mailserver
# Mise à jour de l'enregistrement TLSA
ssh root@mondedie-mail.lan update-tlsa ${fingerprint,,}
curl --silent -X POST --data-urlencode 'payload={"channel":"#mondedie-flarum", "username":"acme-bot","text":"Le certificat SSL a été renouvelé sur mondedie-web et mondedie-mail. Les conteneurs nginx et mailserver ont été redémarrés automatiquement.","icon_emoji":":infomation_source:"}' $SLACK_HOOK >/dev/null 2>&1
#!/bin/bash
# /usr/local/bin/update-tlsa sur mondedie-mail
SLACK_HOOK=https://hooks.slack.com/services/xxxxxxxx/xxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxx
# Empreinte du certificat récupérée lors du renouvellement
# par acme.sh à partir de mondedie-web
fingerprint=$1
domain="mondedie.fr"
zonename="db.${domain}"
zonefile="/mnt/docker/nsd/zones/${zonename}"
serial=$(date -d "+1 day" +'%Y%m%d%H')
tlsa_line_number=$(grep -n TLSA $zonefile | cut -d : -f 1)
tlsa_dns_record="_dane IN TLSA 3 0 1 ${fingerprint}"
expiration_date=$(date -d "+6 months" +'%Y%m%d%H%M%S')
# Mise à jour de la zone DNS avec un nouveau
# serial et un nouvel enregistrement TLSA
sed -i -e "s/20[0-9][0-9]\{7\} ; Serial/${serial} ; Serial/g" \
-e "${tlsa_line_number}s/.*/${tlsa_dns_record}/" $zonefile
# On vérifie que la zone est valide avant de la signer
if docker exec nsd nsd-checkzone "$domain" /zones/"$zonename" | grep -q 'zone mondedie.fr is ok'; then
echo "Execution de la commande : docker exec nsd signzone ${domain} ${expiration_date}"
docker exec nsd signzone "$domain" "$expiration_date"
curl --silent -X POST --data-urlencode 'payload={"channel":"#mondedie-flarum", "username":"acme-bot","text":"La zone DNS a été mise à jour et signée avec DNSSEC. Merci de vérifier la conformité 10 minutes après la notification avec : http://dnsviz.net/d/mondedie.fr/analyze/ et https://dnssec-debugger.verisignlabs.com/mondedie.fr","icon_emoji":":infomation_source:"}' $SLACK_HOOK >/dev/null 2>&1
curl --silent -X POST --data-urlencode 'payload={"channel":"#mondedie-flarum", "username":"acme-bot","text":"'"zonefile=$zonefile, expiration_date=$expiration_date, serial=$serial, tlsa_dns_record=$tlsa_dns_record, tlsa_line_number=$tlsa_line_number"'","icon_emoji":":infomation_source:"}' $SLACK_HOOK >/dev/null 2>&1
else
echo "La zone ${zonefile} n'est pas valide !"
curl --silent -X POST --data-urlencode 'payload={"channel":"#mondedie-flarum", "username":"acme-bot","text":"Une erreur est survenue pendant la mise à jour de la zone DNS. Merci de vérifier la conformité avec la commande suivante : docker exec nsd nsd-checkzone '"$domain"' /zones/'"$zonename"'","icon_emoji":":rotating_light:"}' $SLACK_HOOK >/dev/null 2>&1
fi
Et ne pas oublier de mettre ceci dans chaque vhost nginx ayant un sous-domaine renouvelé automatiquement :
location ~ /\.well-known/acme-challenge {
root /nginx/www/acme; # à modifier selon votre configuration
allow all;
}
Je l'avais pas posté avant sur le forum parce que je l'avais pas suffisamment testé, j'étais sûr de moi à 95% Mais aujourd'hui le renouvellement a eu lieu et il n'y a eu aucun problème.
A noter que j'ai mis le serial de la zone DNS à J+1 serial=$(date -d "+1 day" +'%Y%m%d%H')
lors du renouvellement pour éviter un décrémentation invonlontaire si quelqu'un modifie la zone au même moment. Normalement ça devrait pas arriver parce que j'ai mis l'heure au format 24 heures dans le serial, mais bon, on est jamais trop prudent
laster13 tient moi au courant
- Modifié
Je m'étais pas penché sur la méthode de renouvellement d'un certificat wildcard avec mon conteneur NSD, donc c'est pour ça que je suis resté sur un SAN. Ensuite j'ai vu ton tuto ^^
Pour le moment, je laisse comme ça, j'ai pas vraiment d'utilité à mettre un wildcard sur mondedie.fr.
- Modifié
Pas mal le script.
Moi j'utilisais ça, mais pas avec acme.sh
:
f_check_certs() {
cd /etc/letsencrypt/live
for domain in `find * -type d`; do
FULLCHAINFILE=/etc/letsencrypt/live/${domain}/fullchain.pem
openssl x509 -checkend 864000 -noout -in "${FULLCHAINFILE}" &>/dev/null
if [ $? == 0 ]; then
f_log INF "Certificate for ${domain} is good for another 10 days!"
else
f_log INF "Time to renew ${domain}!"
f_log INF "Downloading cerbot image..."
docker pull certbot/certbot &>/dev/null
f_log INF "Stopping nginx..."
service nginx stop &>/dev/null
f_log INF "Renewing ${domain}..."
old_fingerprint=$(openssl x509 -noout -in "${FULLCHAINFILE}" -fingerprint -sha256 | cut -c 20- | sed s/://g | awk '{print tolower($0)}')
cd ${domain}
cp cert.pem old_cert.pem && cp chain.pem old_chain.pem && cp fullchain.pem old_fullchain.pem
docker run -ti --rm -p 80:80 -p 443:443 -v /etc/letsencrypt:/etc/letsencrypt certbot/certbot \
certonly --standalone --agree-tos -m wonderfall@targaryen.house \
--csr /etc/letsencrypt/live/${domain}/csr.der \
--cert-path /etc/letsencrypt/live/${domain}/cert.pem \
--chain-path /etc/letsencrypt/live/${domain}/chain.pem \
--fullchain-path /etc/letsencrypt/live/${domain}/fullchain.pem
new_fingerprint=$(openssl x509 -noout -in "${FULLCHAINFILE}" -fingerprint -sha256 | cut -c 20- | sed s/://g | awk '{print tolower($0)}')
f_log INF "Certificate renewed for ${domain}."
f_log INF "Starting nginx..."
service nginx start &>/dev/null
f_log INF "Updating TLSA records..."
sed -i "s/${old_fingerprint}/${new_fingerprint}/g" /home/docker/nsd/zones/db.${domain}
dns_update.sh ${domain}
f_log INF "Done!"
fi
done
}
domain=$1
f_log INF "Domain set to ${domain}."
old_serial=$(grep "Serial" /home/docker/nsd/zones/db.${domain} | grep -o '[0-9]\+')
new_serial=${old_serial} && let new_serial++
sed -i -e "s/${old_serial}/${new_serial}/g" /home/docker/nsd/zones/db.${domain}
f_log INF "Incremented serial."
f_log INF "Signing DNS zone..."
docker exec nsd signzone ${domain} &>/dev/null
f_log INF "Done."
C'est moins propre mais ça faisait le boulot. Si tu fais ton truc pars plutôt ce qu'a fait Hardware je pense. Perso faut je revois ça pour traefik et comment dump les certs de acme.json
d'abord...
Au passage, je ne suis pas fan du wildcard, pourquoi ? C'est bien si l'utilises sur un seul serveur, mais sinon c'est une mauvaise pratique que d'éparpiller des clés privées à d'autres serveurs dont la compromission de l'un peut mener à la compromission de l'ensemble du domaine. Tous les sous-domaines sont à risque quand tu fais un wildcard (SPOF). Je ne dis pas qu'il faut éviter, je dis juste qu'il faut être prudent...
- Modifié
Wonderfall Au passage, je ne suis pas fan du wildcard, pourquoi ? C'est bien si l'utilises sur un seul serveur, mais sinon c'est une mauvaise pratique que d'éparpiller des clés privées à d'autres serveurs dont la compromission de l'un peut mener à la compromission de l'ensemble du domaine. Tous les sous-domaines sont à risque quand tu fais un wildcard (SPOF). Je ne dis pas qu'il faut éviter, je dis juste qu'il faut être prudent...
Je ploussoie la remarque sur le wildcard.
- Modifié
Je viens de tester tes scripts pour le renouvellement des enregistrements TLSA et ca fonctionne nickel. C'est plus léger que le script que j'ai proposé dans le tuto, l'auteur inscrit dans la zone l'ancien TLSA en "old-dane-hash" que son script supprime après 24 heures. Il considère que ce délai est nécessaire pour la propagation des enregistrements.
L'idée est qu'il n'y ait pas de "trou" dans le relais des 2 enregistrements TLSA, d’où ma question, est que le nouvel enregistrement est pris en compte immédiatement au niveau DNS ?
Edit : c'est peu etre un bug mais du coup le plugin HTTPS+ Checker de firefox montre que dnssec et dane ne sont pas actif sur mondedie.
A priori la valeur de la variable "$expiration_date" est trop grande, un warning sur zonemaster
DNSSEC WARNING La signature (RRSIG) avec la clé de tag 27616 et couvrant les enregistrements de type(s) "DNSKEY" a une durée de validitée restante de 15770474 secondes, ce qui est trop long.
Cet addon semble buggé, il vaut mieux utiliser ça : https://www.dnssec-validator.cz/
laster13 A priori la valeur de la variable "$expiration_date" est trop grande, un warning sur zonemaster
Oui j'avais déjà vu ça, 6 mois c'est trop pour zonemaster.
- Modifié
A la question de savoir si les enregistrement TLSA étaient pris en compte immédiatement, le site https://www.huque.com/bin/danecheck me confirme que oui.
Du coup, le renew des certificats génére une signature DNSSEC pour 6 mois ce qui fait qu'on a plus besoin de se préoccuper de la signature de zone. Par ailleurs je ne connaissais pas ce système de notifications slack intégrable dans les scripts, je trouve ça génial, je vais mettre à jour tous mes scripts.
J'ai testé ton script pour le wildcard en rajoutant les options suivantes :
certbot certonly --rsa-key-size 4096 --manual --preferred-challenges=dns --manual-auth-hook /mnt/docker/nsd/leadd.sh --manual-cleanup-hook /mnt/docker/nsd/ledel.sh --renew-hook "service nginx reload" --post-hook "update-mail-tlsa" ...
Cela fonctionne très bien et avec au final les paramètres renew
# Options used in the renewal process
[renewalparams]
installer = None
manual_cleanup_hook = /mnt/docker/nsd/ledel.sh
authenticator = manual
manual_public_ip_logging_ok = True
pref_challs = dns-01,
account = fd7a3565aba701........
server = https://acme-v02.api.letsencrypt.org/directory
manual_auth_hook = /mnt/docker/nsd/leadd.sh
rsa_key_size = 4096
post_hook = update-mail-tlsa
renew_hook = service nginx reload
Au final ton script est vraiment super et je souhaiterais adapter mon tuto avec si tu es d'accord de manière à pouvoir le garder disponible avant qu'il se noie parmi les autres posts. Si tu es ok pour déverrouiller le tuto
Reste plus qu'à trouver un moyen de renouveler automatiquement les clés ZSK et KSK mais surtout de pouvoir incrémenter le fingerprint auprès de Gandi sans avoir a le faire manuellement .. peut être avec l'Api livedns de gandi, je vais creuser ..
Plutôt que de rentrer le fingerprint dans gandi, ne peut on pas tout simplement mettre un enregistrement (je sais pas quoi) dans le fichier de zone qui ferait le boulot ?