Documenter le renouvellement des certificats tls avec Traefik
Explication de kaiyou :
On a deux modes très différents de gestion des certifs entre Kity et Aegir. Sur Kity on a bien traefik en reverse proxy mais les certificats sont gérés par cert-manager, avec une configuration assez tunable donc pas de souci.
Sur aegir on a traefik qui fait les deux. Sauf qu'on utilise encore traefik v1, qui était très pauvre en configuration letsencrypt. Notamment letsencrypt accepte des vérifications principalement en callback http(s) (modes http et tls) et en dns avec des record txt à setup. Le http est bien pour les domaines qu'on héberge en général mais il ne fonctionne pas pour les wildcard (le *.tedomum.net, *.blogs.tedomum.net et *.tedomum.org principalement). Le DNS est top pour les wildcard et marche pour tout tant que les domaines sont hébergés chez nous. C'est le cas de 80% de ce qu'on a mais pas de certains blogs par exemple qui pointent vers le WordPress sans mettre le DNS chez nous.
Le problème principal de traefik v1 c'est qu'il ne permet pas de configurer quel mode utiliser en fonction du domaine donc c'est soit tout l'un soit tout l'autre.
Si on mettait tout DNS ça excluerait des blogs WordPress c'est nul, j'avais un peu milité pour diminuer l'emploi de WordPress à un moment mais c'est pas la bonne voie. On pourrait mettre tout http mais ça fait générer beaucoup de certifs en tedomum.net ce qui nous a coûté plusieurs fois de taper les rate limits de letsencrypt, d'autant plus que traefik génère à la vollée quand ça matche un wildcard, ce qui devient drôle quand un bot scanne nos domaines.
Tout ça pour dire qu'il y a deux façons de s'en sortir : upgrade sur traefik v2 qui est plus avancé mais ça prend du temps qu'on n'a toujours pas pris surtout que indispo notable dans l'équation. Ou bien jouer avec la configuration traefik pour basculer d'un mode à l'autre de temps en temps. Les certifs durent 3 mois donc globalement quand on en voit qui approchent parce qu'ils sont gérés en mode http alors qu'on est en dns, on bascule en http, et vice versa.
Cette bascule se gère trivialement mais salement en modifiant la conf traefik sur le serveur, en commentant et decommentant les bonnes lignes et en faisant un restart de traefik. Le restart coupe les connexions en cours pendant 5 secondes environ, l'impact est négligeable même si ça se voit quand on est les yeux rivés sur un client Matrix par exemple.
Tout cela est complété par ce qu'on fait pour Gitlab pages : il gère lui même son reverse proxy et ses certificats, sauf pour le wildcard *.tedomum.org qu'il n'a aucun moyen de gérer. Pour ce dernier, cf. les sujets d'il y a deux semaines, on fait une copie manuelle du certificat généré par traefik à intervalles de trois mois. La section précise dans le traefik.toml :
#[acme.tlsChallenge] [acme.dnsChallenge] provider = "pdns"
Donc tantôt on commente la première tantôt les deux suivantes.
Donc pour expliquer le souci pour les domaines de crypte-0n là : on est en mode DNS donc traefik gère bien tous les domaines donc le DNS est chez nous, ce qui n'est pas le cas du DNS de crypt-0n.
Les actions simples pour basculer :
- Uncomment et comment dans le
traefik.toml
- Restart le service
traefik
Le restart du service se fait avec un docker-compose down && docker-compose up -d
.
Commande pour vérifier les dates de certificats :
DOMAIN=<domain_name> ; echo | openssl s_client -servername "$DOMAIN" -connect "$DOMAIN":443 2>/dev/null | openssl x509 -noout -enddate
Où <domain_name> est le nom de domaine !