Voici du feedback et du fixing qui peuvent aider ceux qui constatent que le renouvellement automatique du certificat ne se fait pas.
La méthode de certificat que j’ai déployée pour la seconde création de certificat il y a plus de 2 mois a installé certbot-auto dans /opt/letsencrypt :
https://domohab.be/index.php/2019/02/08 … -internet/
C’est un autre endroit que le premier certificat que j’avais installé par une autre méthode : /etc.
D’autres tutos donnent encore d’autres chemins d’exécution : /usr/local/sbin.
Je me rend compte que mes fichiers crontab et certbot-auto étaint multiples et aux contenus variables avec tantôt un chemin et tantôt l’autre !
Mon certificat ne s’est pas mis à jour après plus de 2 mois sans que je puisse dire si c’est par mauvaise écriture du crontab ou mauvais fichiers.
Voici quels tests pour discerner les choses !
-
La commande préconisée dans le crontab ne marche pas quelque soit le chemin de commande retenu.
-
Le certbot-auto de /opt/letsencrypt correspondant au certificat actuel renouvèle manuellement avec succès mon certificat depuis ce répertoire et seulement celui-ci.
-
Il y a un autre certbot-auto et un autre crontab (dans /etc) vers lesquels malheureusement la commande « whereis » pointe sans que je sache pointer whereis sur ceux de /opt/letsencrypt.
Bref… je ne comprends pas tout… mais en exécutant manuellement la commande suivante (en sudo), qui ajoute de se déplacer dans le bon répertoire, le renouvèlement de certificat fonctionne depuis n’importe quel répertoire !
Code : Tout sélectionner
sudo -i
cd /opt/letsencrypt && /opt/letsencrypt/certbot-auto renew --no-self-upgrade --post-hook "systemctl restart apache2"
Par déduction, je parie que le bon crontab sera :
Code : Tout sélectionner
42 6 * * * cd /opt/letsencrypt && /opt/letsencrypt/certbot-auto renew --no-self-upgrade --post-hook "systemctl restart apache2"
Ne sachant pas quel crontab se lance, j’ai mis la ligne à la fois dans le crontab du répertoire /etc et dans celui du répertoire /opt/letsencrypt.
Enfin, pour blinder la chose, j’ai trouvé le moyen d’ajouter le chemin /opt/letsencrypt dans $PATH en remplaçant la ligne :
Code : Tout sélectionner
echo PATH
par :
Code : Tout sélectionner
echo PATH=/opt/letsencrypt:$PATH
Et ainsi on obtient :
Code : Tout sélectionner
jeedom@Jeedom:~$ echo $PATH
/opt/letsencrypt:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
jeedom@Jeedom:~$ whereis crontab
crontab: /usr/bin/crontab /etc/crontab /opt/letsencrypt/crontab /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz
jeedom@Jeedom:~$ whereis certbot-auto
certbot-auto: /etc/certbot-auto /opt/letsencrypt/certbot-auto
Malgré tout j’ai encore un fonctionnement imparfait donc ma configuration a priori fonctionnelle n’est pas très propre :
Code : Tout sélectionner
jeedom@Jeedom:/$ sudo /opt/letsencrypt/certbot-auto renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/XXX.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Attempting to renew cert (XXX) from /etc/letsencrypt/renewal/XXX.conf produced an unexpected error: [b]Unable to find manual-auth-hook command ./manual-auth-hook.py in the PATH.
(PATH is /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)[/b]. Skipping.
[b]All renewal attempts failed.[/b] The following certs could not be renewed:
/etc/letsencrypt/live/XXX/fullchain.pem (failure)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/XXX/fullchain.pem (failure)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 renew failure(s), 0 parse failure(s)
Après plusieurs mois de tests, le renouvellement automatique ne marche pas mais la commande recopiée en manuel oui.
Si quelqu’un comprend mieux et peut nettoyer ma configuration, je l’en remercie.
Si cette solution a fonctionné pour vous, merci de le signaler en retour SVP.