2 votes

Certbot a arrêté de générer des certificats

tl;dr : Certbot a cessé de générer des certificats, affiche une erreur "Boucle de redirection détectée", mais il n'y a pas de boucle de redirection réelle.

Le problème suivant est apparu vers le 30 novembre 2023. J'ai concentré mes efforts sur un seul site web d'un seul serveur, mais la même chose se produit sur chaque serveur et chaque site web que j'ai essayé dans notre datacenter. (Sur mon VPS OVH personnel, le problème ne se produit pas.)

Alors, j'ai ce serveur qui héberge quelques milliers de sites Wordpress, chacun avec son propre nom de domaine. J'ajoute régulièrement de nouveaux sites. Pour générer un nouveau certificat, j'utilise la commande suivante :

/snap/bin/certbot certonly --register-unsafely-without-email --config-dir certbot/conf --work-dir certbot/work --logs-dir certbot/logs --webroot --webroot-path /home/wordpress/ -d testcert.numerian.fr,www.testcert.numerian.fr

Cela fonctionnait bien depuis des années, mais depuis la semaine dernière, il m'affiche cette erreur :

Certbot n'a pas pu authentifier certains domaines (authenticator: webroot). L'Autorité de Certification a signalé ces problèmes :
  Domaine : testcert.numerian.fr
  Type : connexion
  Détail : 46.18.231.82 : Récupération de /.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA : Boucle de redirection détectée

  Domaine : www.testcert.numerian.fr
  Type : connexion
  Détail : 46.18.231.82 : Récupération de /.well-known/acme-challenge/14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M : Boucle de redirection détectée

Deux points :

  1. La configuration du serveur nginx n'a pas changé depuis des mois, donc il n'y a aucune raison pour qu'une boucle de redirection soit apparue. De plus, si je recrée manuellement le fichier dans ce répertoire, je peux y accéder correctement avec curl, sans aucune redirection :

    curl -i http://www.testcert.numerian.fr/.well-known/acme-challenge/14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M

  2. Si je regarde les logs de certbot, je constate quelque chose d'étrange : Il semble que letsencrypt essaie d'accéder aux URLs

Voici la partie pertinente du journal :

{
  "identifier": {
    "type": "dns",
    "value": "www.testcert.numerian.fr"
  },
  "status": "invalid",
  "expires": "2023-12-12T08:04:51Z",
  "challenges": [
    {
      "type": "http-01",
      "status": "invalid",
      "error": {
        "type": "urn:ietf:params:acme:error:connection",
        "detail": "46.18.231.82 : Récupération de /.well-known/acme-challenge/14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M : Boucle de redirection détectée",
        "status": 400
      },
      "url": "https://acme-v02.api.letsencrypt.org/acme/chall-v3/290578127326/TNJCjw",
      "token": "14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M",
      "validationRecord": [
        {
          "url": "http://www.testcert.numerian.fr/.well-known/acme-challenge/14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M",
          "hostname": "www.testcert.numerian.fr",
          "port": "80",
          "addressesResolved": [
            "46.18.231.82"
          ],
          "addressUsed": "46.18.231.82"
        },
        {
          "url": "http://www.testcert.numerian.fr/phdQX/.well-known/acme-challenge/14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M",
          "hostname": "www.testcert.numerian.fr",
          "port": "80",
          "addressesResolved": [
            "46.18.231.82"
          ],
          "addressUsed": "46.18.231.82"
        }
      ],
      "validated": "2023-12-05T08:04:51Z"
    }
  ]
}

Cela doit être nouveau, car cette URL préfixée ne pouvait pas fonctionner avant. Cependant, même après avoir configuré nginx pour que cette URL préfixée pointe vers le bon fichier, la génération du certificat échoue toujours. Cela fonctionne maintenant, mais cela aurait été une erreur 404 la semaine dernière :

curl -i http://www.testcert.numerian.fr/phdQX/.well-known/acme-challenge/14WgGIBhYGCcUx6BYro1cI4y6UfZ9Z_20uYgFtJQ6-M

Voici la configuration nginx pertinente actuelle (redirige HTTP vers HTTPS, sauf pour acme-challenge, et supprime le préfixe avant well-known/acme-challenge s'il est présent). (Le réécriture n'a été ajoutée que hier.)

server {
    server_name _;
    listen 80 default_server;

    root /home/wordpress;

    location / {
            return 301 https://$host:443$request_uri;
    }
    location ~ well-known/acme-challenge {
        rewrite ^(/\w+)(/\.well-known/acme-challenge/.*)$ $2 last;
    }
}

Plus de config nginx ici : https://gist.github.com/bveuillez/49727a30cc4534ce35b9c0d79ea1d779

J'ai essayé tout ce à quoi j'ai pu penser pour résoudre ce problème, principalement la réinstallation de certbot à partir de zéro, l'essai de diverses options certbot et la manipulation de la configuration nginx, mais je n'ai rien obtenu. Je serais très reconnaissant de tout indice sur la source du problème.


EDIT : tentatives supplémentaires infructueuses

J'ai essayé d'ajouter les options --debug-challenges -v

/snap/bin/certbot certonly --register-unsafely-without-email --config-dir certbot/conf --work-dir certbot/work --logs-dir certbot/logs --webroot --webroot-path /home/wordpress/ -d testcert.numerian.fr,www.testcert.numerian.fr --dry-run --debug-challenges -v

qui m'a montré les valeurs attendues pour deux URLs, et en curl-ant ces URLs j'ai obtenu la bonne valeur, sans aucune redirection. Pourtant, le défi a échoué avec "Boucle de redirection détectée".

letsdebug.net me dit également qu'il voit des redirections 302, dont je ne trouve pas de traces dans mes logs nginx.

J'ai essayé de remplacer --webroot par --nginx

/snap/bin/certbot certonly --register-unsafely-without-email --config-dir certbot/conf --work-dir certbot/work --logs-dir certbot/logs --nginx -d testcert.numerian.fr,www.testcert.numerian.fr --dry-run --debug-challenges -v

J'ai pu voir la configuration nginx modifiée, j'ai pu curl les deux URLs et obtenir la bonne valeur, et pourtant j'ai toujours eu l'erreur "Boucle de redirection détectée".

J'ai essayé de configurer ce domaine pour avoir un webroot séparé du reste du wordpress, au cas où cela viendrait de là d'une manière ou d'une autre :

server {
    server_name testcert.numerian.fr;
    listen 80;

    root /var/www/html;
}

puis la même commande certbot qu'auparavant, avec --debug-challenges, et comme auparavant j'ai obtenu les bonnes valeurs en curl-ant l'URL, mais j'ai ensuite obtenu l'erreur "Boucle de redirection détectée"

EDIT :

J'ai fini par créer une nouvelle VM avec uniquement nginx et certbot pour comparer. Non seulement certbot fonctionnait bien dessus, mais il a également recommencé à fonctionner correctement sur tous les autres serveurs. Je ne peux toujours pas comprendre ce qui a causé puis réparé tout cela, mais au moins le problème est résolu.

2voto

vidarlo Points 3169

Vous avez une boucle de redirection :

$ curl -I http://testcert.numerian.fr/.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA
HTTP/1.1 302 Trouvé
Connection: close
Pragma: no-cache
cache-control: no-cache
Emplacement: /ZQOLV/.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA

$ curl -I http://testcert.numerian.fr/ZQOLV/.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA
HTTP/1.1 302 Trouvé
Connection: close
Pragma: no-cache
cache-control: no-cache
Emplacement: /RkUQX/ZQOLV/.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA

$ curl -I http://testcert.numerian.fr//RkUQX/ZQOLV/.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA  
HTTP/1.1 302 Trouvé
Connection: close
Pragma: no-cache
cache-control: no-cache
Emplacement: /PmcKW//RkUQX/ZQOLV/.well-known/acme-challenge/s2OgquUDSF4hzNPUse66QmM-KOTPApHXrLcIJqFuQTA

Votre serveur Web effectue ces redirections, en ajoutant cinq chiffres aléatoires, pour une raison quelconque. À partir de la configuration que vous avez publiée, je ne peux pas voir ce qui le fait. Vous pouvez obtenir l'intégralité de la configuration avec nginx -T

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X