jobsphp

ActualitéÉcosystème PHP

Activer le HTTPS sur une adresse IP avec FrankenPHP et Let's Encrypt

D'après Laravel News, c'est la première brique qui rend ce scénario vraiment utilisable en production, sans reverse proxy bricolé et sans la fameuse alerte rouge « connexion non sécurisée » qui fait…

Activer le HTTPS sur une adresse IP avec FrankenPHP et Let's Encrypt

Du HTTPS sur une IP brute, sans DNS? FrankenPHP dit banco

On en rêvait, les self-hosters l'ont fait: la beta 4.6.0-beta1 des images Docker serversideup/php permet désormais à un conteneur FrankenPHP de servir du vrai HTTPS en tapant simplement une adresse IP dans la barre du navigateur. D'après Laravel News, c'est la première brique qui rend ce scénario vraiment utilisable en production, sans reverse proxy bricolé et sans la fameuse alerte rouge « connexion non sécurisée » qui fait fuir les utilisateurs.

Comment ça marche, sous le capot?

Le truc tient en une variable d'environnement: CADDY_ACME_PROFILE. Par défaut, elle est à off, ce qui veut dire que Caddy (le serveur embarqué dans FrankenPHP, en v2.11.4) conserve son fallback ZeroSSL. Mais si on la passe à shortlived, on bascule sur le profil de certificats à durée courte de Let's Encrypt — le seul profil sous lequel l'autorité délivre des certificats pour des IP, pas pour des noms de domaine.

Concrètement, Caddy demande des certificats valables 160 heures (un peu moins de sept jours) et les renouvelle automatiquement tous les deux jours. Cette durée colle pile avec la définition du Short-Lived Subscriber Certificate du CA/Browser Forum, ce qui dispense Let's Encrypt d'embarquer des informations de révocation. Pas besoin de DNS, pas besoin de SNI, pas besoin de nom de domaine: on pointe une IP, et le cadenas apparaît.

Qui est concerné (spoiler: plus de monde qu'on ne croit)?

Clairement, les self-hosters qui veulent exposer un service perso sans acheter un domaine ni galérer avec un cert autosigné. Mais si on regarde autour, on réalise que la moitié des setups d'équipe vivent aussi ce problème: staging éphémère, API interne derrière un VPN, dashboard de queue sur un droplet, démo client d'une semaine… Tous accessibles par IP longtemps avant qu'un nom de domaine ne soit décidé.

Du coup, sur le papier, on a un game changer: tu lances ton docker compose up, tu colles ton IP, et le navigateur affiche un cadenas vert. Magique.

Et les pièges, dans tout ça?

Soyons honnêtes, ce n'est pas (encore) un chemin de roses. Quelques points à garder en tête avant de crier victoire:

  • C'est en beta, donc on épingle la version beta de l'image, pas le tag stable 8.4-frankenphp. Histoire de ne pas se retrouver avec un build qui change sous nos pieds.
  • Renewal tous les deux jours, ça veut dire moins de marge en cas de pépin réseau. Si un firewall mal configuré bloque l'egress vers l'API ACME de Let's Encrypt, on a quatre jours et demi pour s'en rendre compte avant l'expiration. Contre plusieurs semaines avec un cert classique de 90 jours.
  • Pas de ZeroSSL en filet de sécurité: activer un profil Let's Encrypt fait sauter le fallback. Let’s Encrypt devient le seul interlocuteur.
  • Ports 8080 et 8443: le conteneur tourne non privilégié, donc il faut publier ces deux ports et les rendre accessibles depuis Internet pour que le challenge ACME passe. À prévoir dans son firewall et dans la conf du cloud provider.

Dans la pratique, la config Docker Compose ressemble à un classique FrankenPHP, avec en plus CADDY_AUTO_HTTPS activé, SSL_MODE: "full" (HTTP redirigé en 308 vers HTTPS) et CADDY_HTTPS_SERVER_ADDRESS qui pointe vers l'IP.

Et après?

On a enfin une réponse sérieuse à une question qu'on se posait depuis des années: « comment je sers du HTTPS sans réfléchir au DNS? ». Reste à voir comment la communauté va s'en emparer et si d'autres images (au-delà de serversideup/php) vont emboîter le pas. En attendant, c'est typiquement le genre de petites avancées qui méritent qu'on teste en conditions réelles, sur un staging jetable, avant de la déployer joyeusement partout.

Alors, on tente l'expérience ce week-end, ou on attend la stable?