Aller au contenu
Yumei

Yumei

Yumei est le démon de gestion de certificats ACME de FreeGateway. Il obtient et renouvelle automatiquement les certificats X.509 (TLS) de tout démon qui en utilise, y compris les serveurs HTTPS et IMAPS, et il fonctionne aussi bien sur un serveur unique qu’au sein d’une grappe de serveurs géographiquement distribués. Yumei est écrit en C++ pour FreeBSD et s’exécute sur votre propre matériel.

Un seul outil de renouvellement pour tous vos démons

Yumei prend en charge tous les démons qui utilisent des certificats X.509, et pas seulement HTTPS. Son fichier de configuration lui indique, pour chaque démon, où placer le certificat renouvelé et comment redémarrer ou recharger le démon ; le renouvellement n’exige donc aucune intervention manuelle. Les propres projets de FreeGateway s’appuient sur lui : Kojo, DTS et Kaigi utilisent tous Yumei pour maintenir leurs certificats à jour.

Yumei fonctionne tout aussi bien seul. Une option de configuration le place en mode autonome : un serveur unique peut donc lui aussi l’utiliser.

Le problème : renouveler derrière GeoDNS

Ce qui distingue Yumei, c’est qu’il sait renouveler les certificats d’un nom d’hôte servi par une grappe de serveurs géographiquement distribués, ce que les clients ACME ordinaires ne savent pas faire.

Un service mondialement distribué, comme un site web ou un serveur de courriel, s’exécute souvent sur de nombreux serveurs qui répondent tous à un même nom d’hôte, par exemple www.example.com, GeoDNS dirigeant chaque utilisateur vers le serveur le plus proche. Cela fait échouer le renouvellement habituel des certificats.

Lorsqu’un serveur demande à une autorité de certification (AC) comme Let’s Encrypt un certificat pour ce nom d’hôte, l’AC doit vérifier que la demande est authentique. Elle le fait en émettant un défi : le serveur demandeur doit rendre disponible un jeton unique à une URL bien connue pour ce nom d’hôte. L’AC interroge ensuite le DNS pour ce nom d’hôte, se connecte à l’adresse IP du serveur obtenue et cherche le jeton. Avec GeoDNS, l’adresse IP obtenue par l’AC dépend de l’endroit où se trouve l’AC : la connexion aboutit donc au serveur le plus proche de l’AC, qui n’est pas nécessairement celui qui a fait la demande. Un renouvellement demandé par le serveur de Tokyo peut ainsi être validé auprès du serveur de Toronto, qui n’a jamais vu le jeton, et le défi échoue.

La vérification de l’AC ne se limite d’ailleurs pas à une seule connexion. L’AC peut se connecter plusieurs fois, depuis différents endroits, et GeoDNS peut diriger chaque connexion vers un serveur différent. Même si la première connexion atteint par hasard le bon serveur, les autres peuvent ne pas l’atteindre : chaque serveur que l’AC atteint doit donc pouvoir répondre au défi.

La solution : la grappe renouvelle ensemble

Yumei s’exécute sur chaque serveur de la grappe. Il désigne un serveur, la source, pour lancer le renouvellement, et partage tout ce qui concerne la transaction, y compris son état et les jetons du défi, avec tous les autres serveurs, les répliques. Quel que soit le serveur que l’AC atteint, il peut répondre au défi, de sorte que l’AC voit un seul serveur à une seule adresse IP. Lorsque le certificat est émis, Yumei distribue le certificat et sa clé privée à chaque serveur de la grappe.

Les serveurs communiquent entre eux par le canal pair à pair propre à Yumei, fondé sur la bibliothèque cryptographique Sodium et sur des clés publiques partagées au préalable. Ce canal est indépendant de TLS : le renouvellement d’un certificat ne dépend donc jamais des certificats en cours de renouvellement.

Si le serveur source tombe en panne, un administrateur peut désigner n’importe quelle réplique comme nouvelle source. Un basculement automatique est prévu dans une version ultérieure.

HTTP-01 uniquement, par conception

Yumei utilise uniquement le défi ACME HTTP-01, servi à partir du chemin d’URI /.well-known/ défini dans la RFC 8615. C’est délibéré. Le DNS est souvent la partie la moins fiable d’un système distribué, en particulier lorsque GeoDNS est en jeu ; Yumei ne dépend donc ni d’enregistrements DNS ni de défis fondés sur le DNS pour prouver que vous contrôlez un nom d’hôte.

À propos du nom

Yumei (有名) est le mot japonais signifiant « célèbre » ou « bien connu », un clin d’œil au chemin /.well-known/ qu’utilise ACME.