Renouvellement certificat Letsencrypt

Forum dédié à l'accès à DomoticZ depuis l'extérieur de chez vous : routage de ports, VPN, VPS ...
La sécurité, c'est important !!
seby90
Messages : 48
Inscription : 21 févr. 2020, 13:12

Re: Renouvellement certificat Letsencrypt

Message par seby90 »

J'ai un ami qui va s'installer un domoticz sur Raspberry. Si on veut lui installer un accès a distance, le top serait un renouvelement automatique du certifcat. Personne à de lien qui explique comment faire ?? Merci d'avance pour votre retour
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Renouvellement certificat Letsencrypt

Message par Chrominator »

Ca se fait tout seul maintenant si on suit le tuto de certbot, les ajouts dans la crontab ou dans les services renouvelleront automatiquement le certificat.
Pièces jointes
Screenshot 2022-02-15 at 20-28-07 Certbot Instructions.png
Screenshot 2022-02-15 at 20-28-07 Certbot Instructions.png (10.79 Kio) Consulté 2852 fois
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Renouvellement certificat Letsencrypt

Message par pierrotori »

bonsoir
j'ai installé un container certbot et je voudrais utiliser un port comme 45678 pour accéder à domoticz en https, j'ai vu que l'on pouvait utiliser dns afin de ne pas ouvrir le port 80 pour la validation du certificat
Mais entre le webroot et le chemin du DNS TXT qui est demandé , je n'arrive pas à valider mon certificat
je passe cette commande

Code : Tout sélectionner

sudo docker run -it --rm --name certbot -v "/home/pi/certbot/etc/letsencrypt:/etc/letsencrypt" -v "/home/pi/certbot/var/lib/letsencrypt:/var/lib/letsencrypt" certbot/certbot certonly --webroot --preferred-challenges dns -m <email> -d <domaine>
merci pour votre aide
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Renouvellement certificat Letsencrypt

Message par pierrotori »

bonjour
je devais faire l’action de renouveler mon certificat
et je me retrouve avec l’erreur 400, mais certbot n’arrive pas a telecharger le certificat, j’ai créé les repertoires avec le max de droits, mais impossible de passer cette étape
avez vous deja rencontre ce problème?
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Renouvellement certificat Letsencrypt

Message par lost »

pierrotori a écrit : 28 déc. 2023, 10:22certbot n’arrive pas a telecharger le certificat
Il ne manquerait pas les hook pre/post permettant d'ouvrir le FW en http, entre autres?

J'ai pour ma part un script unique en lien symbolique vers /etc/letsencrypt/renewal-hooks/pre (+post/deploy). Comme je peux pas commander cela de la box, c'est ouvert par défaut de ce côté vers le PI et c'est le FW du PI qui est ouvre/ferme automatiquement le http via ces hooks pour le renouvellement.

Il y a moyen de tester (et mieux voir ces erreurs exactes?) via:

Code : Tout sélectionner

sudo certbot renew --dry-run
Le wiki domoticz à ce sujet était bien fait, mis à part un peu de custom niveau hooks pre/post je ne pense pas avoir customisé grand chose.
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Renouvellement certificat Letsencrypt

Message par pierrotori »

j'ai cassé ma config certbot en faisant des tests, du coup j'ai fait la commande sans le webroot

Code : Tout sélectionner

certbot certonly --standalone
je viens de voir pour le sujet des hook, https://university.itametis.com/fr/arti ... te_renewal, interressant

je viens de repasser ma commande et sur ma box je laisse passer
443-> 8443 et 80 -> 8080 (paramétrage de mon container domoticz)

Code : Tout sélectionner

docker run -it --rm --name certbot -e "TZ=Europe/Paris" -v "/home/pi/certbot/etc/letsencrypt:/etc/letsencrypt" -v "/home/pi/certbot/var/lib/letsencrypt:/var/lib/letsencrypt" -v "/var/log:/var/log" -v "/home/pi/domoticz/www:/var/www:rw" certbot/certbot certonly --webroot --preferred-challenges http-01 -w /var/www/ -d <mondomaine> -m <monemail> --dry-run
et j'ai cette erreur

Code : Tout sélectionner

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Simulating renewal of an existing certificate for <mondomaine>

Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
  Domain: <mondomaine>
  Type:   unauthorized
  Detail: <monip>: Invalid response from http://<mondomaine>/.well-known/acme-challenge/_vz9aMptNQPW1-vahDtfrGAsAlGguv0UQwxMs4nLW4A: 400

Hint: The Certificate Authority failed to download the temporary challenge files created by Certbot. Ensure that the listed domains serve their content from the provided --webroot-path/-w and that files created there can be downloaded from the internet.

Some challenges have failed.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.
certbot crée bien le fichier dans .well-known/acme-challenge/_vz9aMptNQPW1-vahDtfrGAsAlGguv0UQwxMs4nLW4A, mais il n'arrive pas à le télécharger, j'ai essayé avec un wget meme problème et en sudo
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Renouvellement certificat Letsencrypt

Message par lost »

pierrotori a écrit : 28 déc. 2023, 19:27 je viens de repasser ma commande et sur ma box je laisse passer
443-> 8443 et 80 -> 8080 (paramétrage de mon container domoticz)
Le port http à laisser passer durant le renew certbot n'est pas le port utilisé par Domoticz, l'updater monte son propre serveur http en fait et j'ai pas souvenir que le port était configurable. Chez moi le 8080 de Domoticz n'a aucune règle NAT et c'est 80->80 ouvert box et seulement le temps utile pour certbot ce même 80 côté PI (via ufw).

Cela fonctionne depuis des années, donc souvenir peu présent même si l'année dernière une réinstall complète (raspbian+domoticz, avec passage de tout en 64bit sur un PI3B) m'avait fait remettre des notes à jour que je pourrais copier au besoin (avec le script des hooks) après avoir caviardé si besoin les infos perso. Mais point de conteneurs chez moi, faudra adapter.
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Renouvellement certificat Letsencrypt

Message par pierrotori »

je viens d'essayer avec 80->80, j'ai cette erreur : Connection refused

Code : Tout sélectionner

Certbot failed to authenticate some domains (authenticator: webroot). The Certificate Authority reported these problems:
  Domain: <mondomaine>
  Type:   connection
  Detail: <monip>: Fetching http://<mondomaine>/.well-known/acme-challenge/cS-hsIZRS350B6JqAIlepel3FJs8wvS_Xly1f3Cqo1c: Connection refused
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Renouvellement certificat Letsencrypt

Message par lost »

Avant cela, on a:
Certbot failed to authenticate some domains

Incohérence domaine/IP? Ou de DNS (dynamique)?
J'utilise pour ma part un domaine no-ip, en gratuit, qui n'a pas posé ces pb.

En tout cas cela me semble avoir progressé vs situation précédente.
Dernière modification par Keros le 29 déc. 2023, 21:00, modifié 1 fois.
Raison : Citation supprimée. Merci de ne pas citer le message précédent lors d'une réponse directe.
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Renouvellement certificat Letsencrypt

Message par lost »

Mes notes concernant install/config certbot (ufw est utilisé en FW/préalablement installé/configuré pour ne laisser passer que https en temps normal de partout, le 8080 de domoticz pour le réseau local, le 80/http est utilisé part certbot ouvert par le script de hook) ; MON_DOMAINE.com est mon domaine "dyndns" (passé à no-ip depuis que dyndns est deven payant y'a au moins 5 ans)...

Code : Tout sélectionner

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

sudo ufw allow http (+BOX !!!)
sudo certbot certonly --standalone
sudo ufw delete allow http

sudo ln -s /home/pi/scripts/updCertDomoticz.sh /etc/letsencrypt/renewal-hooks/pre
sudo ln -s /home/pi/scripts/updCertDomoticz.sh /etc/letsencrypt/renewal-hooks/post
sudo ln -s /home/pi/scripts/updCertDomoticz.sh /etc/letsencrypt/renewal-hooks/deploy

sudo cat /etc/letsencrypt/live/MON_DOMAINE.com/privkey.pem > ~/domoticz/server_cert.pem
sudo cat /etc/letsencrypt/live/MON_DOMAINE.com/fullchain.pem >> ~/domoticz/server_cert.pem
sudo cp ~/domoticz/server_cert.pem ~/domoticz/letsencrypt_server_cert.pem
sudo tail -n 8 ~/domoticz/server_cert.pem.org >> ~/domoticz/server_cert.pem

Test:

sudo certbot renew --dry-run

Port 80 utilise pour renouvellement, cf updCertDomoticz.sh

/home/XXX/domoticz/server_cert.pem.org
Est en fait une copie préalable du server_cert.pem présent d'origine avec le certificat par défaut. Une petite partie est réutilisée car sinon c'est assez long à générer sur PI.
Le script updCertDomoticz mis en lien (unique, chaque cas/hook traité via nom appel/lien):

Code : Tout sélectionner

#!/bin/bash
# 1st save original domoticz cert file according to DOMO_CORG value
# Must be linked to renewal hooks:
# sudo ln -s /home/pi/scripts/updCertDomoticz.sh /etc/letsencrypt/renewal-hooks/post
# sudo ln -s /home/pi/scripts/updCertDomoticz.sh /etc/letsencrypt/renewal-hooks/pre
# sudo ln -s /home/pi/scripts/updCertDomoticz.sh /etc/letsencrypt/renewal-hooks/deploy
# TEST: Cerbot use http/80 for renewal, so port must be open/NATed on router and will
#       be opened/closed on target ufw firewall just during cert update...
# sudo certbot renew --dry-run

# Change according to used domoticz user/path if needed,
# DOMO_CERT file must match /etc/init.d/domoticz.sh -sslcert setup!!!
DOMO_CERT=/home/pi/domoticz/server_cert_dom.pem
DOMO_CORG=/home/pi/domoticz/server_cert.pem.org

# Change to domoticz used domain configured for certbot/letencrypt:
PKEY_FILE=/etc/letsencrypt/live/MON_DOMAINE.com/privkey.pem
FCHN_FILE=/etc/letsencrypt/live/MON_DOMAINE.com/fullchain.pem

BN=$(cd "$(dirname "$0")" && pwd)
#echo $BN
HOOK=${BN##*/}
#echo $HOOK

if [ ${HOOK} == 'pre' ]
then
  echo "Open FW..."
  ufw allow http
  sleep 2
  echo "FW opened!"
  exit 0
fi

if [ ${HOOK} == 'post' ]
then
  echo "Close FW."
  ufw delete allow http
  # Print last file upgrade in seconds?
  LAST_PKEY_SEC=$(( `date +%s` - `stat -L --format %Y $PKEY_FILE` ))
  echo "Last cert update (sec) : "${LAST_PKEY_SEC}
  exit 0
fi

if [ ${HOOK} == 'deploy' ]
then
    echo "Certbot: New cert deploy!"
    cat $PKEY_FILE >  $DOMO_CERT
    cat $FCHN_FILE >> $DOMO_CERT
    tail -n 8 $DOMO_CORG >> $DOMO_CERT
    echo "Restarting Domoticz..."
    /etc/init.d/domoticz.sh restart
    echo "Cert update done !"
    exit 0
fi

echo "Bad execution path : "${BN}
exit 1
Répondre