Ir al contenido principal

Error en el client de Let's Encrypt de Hiawatha

Som a agost, tot està aturat i sembla que la població de les ciutats sigui la tercera part de la que hi ha un divendres a la tarda de tardor. frankie m'avisa que està fallant la renovació del certificat de la web. Tenim 3 setmanes per arreglar-ho, caduca l'11 de setembre, però aquestes coses com abans s'aborden millor.

Redescobreixo la configuració de l'script. Hiawatha ofereix un programa en php per gestionar els certificats. Dóna un error - Error getting challange for sub.marin.li.. Després de posar un printf per aquí i per allà per saber què està fallant en concret, trobo la configuració (ahà, la que estava editant era només una plantilla d'exemple!) i un arxiu de debug que es genera al costat.

Seguint el log de debug trobo l'error concret que retorna Let's Encrypt: No such authorization. Mirant una mica més amunt, trobo que després d'un parell de peticions, retorna un codi d'autorització amb la URL https://acme-v02.api.letsencrypt.org/acme/authz-v3/12345678 i que el programa envia algo a https://acme-v02.api.letsencrypt.org/acme/authz/12345678. Doncs obvi que no troba aquest codi d'autorització! Però em puja la mosca al nas: si el domini al que estem preguntant es diu acme-v02, per què coi afegeixen un v3 a la url? Estan fent proves a producció? Han instaŀlat una suposada versió 3 al servidor de la v2?

Mentrestant, trobo un parell de resultats al duckduckgo:

  1. No such authorization
  2. Unusual authz-v3 authorization URL

La primera entrada és del 8 de juliol, sospitós! El nostre certificat és del juny i caduca al cap de 90 dies. Però no diu res de bo. Miro al final del fil i resulta que feien una cosa rara amb no sé quins identificadors, però sabeu què? l'error l'havia introduït Let's Encrypt. Hmmmm estiu, parsimònia, i un terç de població per revisar els canvis. L'error ja el van arreglar, però trobo la segona entrada.

Aquí trobo el que em diuen. Resulta que sí, que han canviat les URL sense avisar, i que "els clients d'ACME han de fer servir la URL que se'ls dóna". Bingo! El nostre client d'ACME, o sigui, el programa de hiawatha pels certificats construeix ell solet les URL, només agafant el paràmetre del final. No sé qui s'ha saltat les especificacions aquí, però està clar que entre LE de vacances i Hiawatha abandonat, això no ho arreglarà una actualització la setmana que ve.

Recupero el codi on havia ficat els printf i els esborro, ja no calen: important, els havia marcat amb un comentari tipus # CANVIS DE PROVA! per poder esborrar tot de cop més fàcil. Navegant una mica pel codi trobo els llocs on es construeixen les URL, i després de descobrir que el pas de "challenge" també falla, acabo amb aquests canvis:

/usr/lib/hiawatha/letsencrypt/acmev2.php:258:                   # CANVIS! - 25 d'agost. Error en les URL
/usr/lib/hiawatha/letsencrypt/acmev2.php-259-                   # $path = "/acme/authz/".$order["authorization"];
/usr/lib/hiawatha/letsencrypt/acmev2.php-260-                   $path = "/acme/authz-v3/".$order["authorization"];
/usr/lib/hiawatha/letsencrypt/acmev2.php-261-                   if (($result = $this->GET($path)) === false) {
/usr/lib/hiawatha/letsencrypt/acmev2.php-262-                           return false;
/usr/lib/hiawatha/letsencrypt/acmev2.php-263-                   }
--
/usr/lib/hiawatha/letsencrypt/acmev2.php:294:                   # CANVIS! - 25 d'agost. Error en les URL
/usr/lib/hiawatha/letsencrypt/acmev2.php-295-                   # $path = "/acme/challenge/".$challenge["challenge"];
/usr/lib/hiawatha/letsencrypt/acmev2.php-296-                   $path = "/acme/chall-v3/".$challenge["challenge"];
/usr/lib/hiawatha/letsencrypt/acmev2.php-297-                   $payload = array("keyAuthorization" => $challenge["key"]);
/usr/lib/hiawatha/letsencrypt/acmev2.php-298-                   if (($result = $this->POST($path, $payload)) == false) {
/usr/lib/hiawatha/letsencrypt/acmev2.php-299-                           return false;
--
/usr/lib/hiawatha/letsencrypt/acmev2.php:308:                   # CANVIS! - 25 d'agost. Error en les URL
/usr/lib/hiawatha/letsencrypt/acmev2.php-309-                   # $path = "/acme/authz/".$order["authorization"];
/usr/lib/hiawatha/letsencrypt/acmev2.php-310-                   $path = "/acme/authz-v3/".$order["authorization"];
/usr/lib/hiawatha/letsencrypt/acmev2.php-311-
/usr/lib/hiawatha/letsencrypt/acmev2.php-312-                   if (($result = $this->GET($path)) === false) {
/usr/lib/hiawatha/letsencrypt/acmev2.php-313-                           return false;

I fet, el renew ja torna a funcionar. Em preocupo una mica mentre no veig el nou certificat al navegador, fins qu recordo que no he reiniciat el hiawatha. Ara sí, caduca el novembre!

Acabo amb un regust agredolç entre satisfacció per haver-ho arreglat i por i desconfiança pel programari abandonat. No esperàvem trobar problemes tan aviat.

És diumenge i se suposa que el veïnat hauria d'estar tornant, però al carrer no se senten cotxes. Una tórtora despistada passa volant i se sent una moto de lluny. Hi ha vida, però a un terç. S'hi està bé.