Erreur Certbot : The client lacks sufficient authorization :: Invalid response from ...
Ce matin, en faisant le tour des serveurs dont je m'occupe, j'ai eu la désagréable surprise de voir qu'il s'était produit une erreur lors du renouvellement du certification d'un domaine via Certbot, l'outil de Let's Encrypt.
Processing /etc/letsencrypt/renewal/www.mon-domaine.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator apache, Installer apache
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.mon-domaine.com
Waiting for verification...
Cleaning up challenges
Attempting to renew cert (www.mon-domaine.com) from /etc/letsencrypt/renewal/www.mon-domaine.com.conf produced an unexpected error: Failed authorization procedure. www.mon-domaine.com (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.mon-domaine.com/.well-known/acme-challenge/uSHJ4BACdYeBvb4WYX79gwSUt6nxpcPdtq8wFmneRMs: "<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">n<html><head>n<title>404 Not Found</title>n</head><body>n<h1>Not Found</h1>n<p". Skipping.
Outch !
Pensant qu'il s'agissait d'une erreur due à la version de Certbot-auto, comme nous avions pu le voir en début d'année, je me lance un renouvellement du certificat du domaine en question, en laissant Certbot se mettre à jour.
certbot-auto certonly -d www.mon-domaine.com
La réponse est immédiate, avec en première partie, la mise à jour de certbot-auto, telle qu'espérée.
Requesting to rerun ./certbot-auto with root privileges...
Upgrading certbot-auto 0.28.0 to 0.29.1...
Replacing certbot-auto...
Creating virtual environment...
Installing Python packages...
Installation succeeded.
La seconde partie de la réponse fut beaucoup moins agréable.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator apache, Installer None
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.mon-domaine.com
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. www.mon-domaine.com (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.mon-domaine.com/.well-known/acme-challenge/ocEHzSXxQZhSx083o01XUsHKSfGGDTC1k-DamEalszk: "<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">n<html><head>n<title>404 Not Found</title>n</head><body>n<h1>Not Found</h1>n<p"
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: www.mon-domaine.com
Type: unauthorized
Detail: Invalid response from
http://www.mon-domaine.com/.well-known/acme-challenge/ocEHzSXxQZhSx083o01XUsHKSfGGDTC1k-DamEalszk:
"<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML
2.0//EN">n<html><head>n<title>404 Not
Found</title>n</head><body>n<h1>Not Found</h1>n<p"
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.
Et boom, re-fail ! Le certificat ne se met toujours pas à jour, malgré la nouvelle version de certbot-auto. Il y a toujours un soucis d'authentification.
Même si certbot créer ses propres règles pour accéder au dossier, je tente de re-créer le chemin .well-known/acme-challenge et d'y placer un fichier de test afin de voir si les droits peuvent poser soucis ou si par hasard, aucune règle de réécriture de mon fichier .htaccess ne bloque l'accès aux fichiers créés à cet endroit.
Via son URL, le fichier répond bien, et je n'ai pas l'erreur 404 qu'obtient Let's Encrypt lors de son accès.
Après quelques vérifications, et quelques essais, j'ai tout de même pu renouveler le certificat. Pour cela, je suis passé par une autre méthode d'authentification. En effet, au lieu d'utiliser la méthode "Apache Web Server plugin", j'ai utilisé la méthode "Place files in webroot directory".
certbot-auto certonly -d www.mon-domaine.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 3
Plugins selected: Authenticator webroot, Installer None
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.mon-domaine.com
Input the webroot for www.mon-domaine.com: (Enter 'c' to cancel):
/www/com.mon-domaine.www
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.mon-domaine.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.mon-domaine.com/privkey.pem
Your cert will expire on 2019-03-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Et hop ! Cela a bien fonctionné. Je peux d'ailleurs le vérifier avec la commande dédiée
certbot-auto certificates -d www.mon-domaine.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following matching certs:
Certificate Name: www.mon-domaine.com
Domains: www.mon-domaine.com
Expiry Date: 2019-03-11 08:59:40+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/www.mon-domaine.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/www.mon-domaine.com/privkey.pem
Le certificat est bien reparti pour 90 jours.
Si le problème a bien été corrigé ici, il ne l'a été que pour un domaine, et encore, temporairement. Cette méthode n'est pas viable pour le renouvellement automatique des domaines, car il faut indiquer le dossier racine de chaque site.
Pour trouver comment corriger définitivement le soucis, je tente de faire un renouvellement forcé, toujours du même domaine, mais en repassant par la méthode "Apache Web Server plugin".
certbot-auto certonly --force-renew -d www.mon-domaine.com
Nouvelle surprise, le renouvellement passe sans encombre, comme si rien ne c'était passé. Après vérification, le domaine a bien été renouvellé.
Certificate Name: www.mon-domaine.com
Domains: www.mon-domaine.com
Expiry Date: 2019-03-11 09:58:27+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/www.mon-domaine.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/www.mon-domaine.com/privkey.pem
La date d'expiration du certificat a bien été décalée d'une heure, confirmant le renouvellement.
La question est désormais, est ce l'utilisation de la méthode 3 ou y a t il un autre facteur qui aurait débloqué le renouvellement du domaine. Est ce que le domaine se renouvellera bien automatiquement lorsque cela sera nécessaire ? Réponse dans 60 jours.