Les clients ACME

Par Alexandre | 17/08/2018

La technologie ACME

L’initiative Let’s Encrypt, portée par de nombreuses sociétés et associations telles que Cisco, Google, Mozilla Foundation, Akamai ou encore l’EFF, a permis de généraliser la diffusion de la technologie SSL en permettant l’émission gratuite de certificats. Elle a également permis de concevoir le protocole ACME (Automated Certificate Management Environment), sous l’égide de l’IETF. Aucune version définitive du protocole n’a été produite, mais deux drafts ont servi de base à l’implémentation par Let’s Encrypt:

  • ACME Draft 02, implémenté en tant que “ACMEv1”
  • ACME Draft 12, implémenté en tant que “ACMEv2”, et ajoutant principalement la prise en charge des certificats “wildcard”.

Il est à noter que, dans les deux cas, l’implémentation effectuée par Let’s Encrypt dévie partiellement ce ces drafts.

Néanmoins, ceci a généré énormément d’intérêt au sein de la communauté OpenSource et même au-delà, et permis l’émergence de nombreuses implémentations clientes, dont quelques-unes sont référencées sur cette page.

Le protocole ACME propose trois systèmes de validation automatique pour la demande de certificat:

  • La validation HTTP: l’autorité ACME fournit puis vient vérifier la présence et le contenu d’un fichier posé sur le serveur web, ce qui permet de valider que celui-ci est bien sous le contrôle du client ;
  • La validation DNS: l’autorité ACME fournit puis vient vérifier la présence et le contenu d’un champ DNS TXT, ce qui permet de valider que le DNS du domaine à valider est bien sous le contrôle du client ;
  • La validation TLS: même principe que précédemment, l’implémentation reposant cette fois sur des extensions TLS. Ce mode de validation est également moins répandu.

Les clients Linux

Assez logiquement, de nombreux clients ACME ont été créés pour Linux, dont certains sont compatibles avec d’autres OS de type UNIX (BSD, macOS, …). Le plus répandu est Certbot, car très lié à Let’s Encrypt, et désormais intégré dans la plupart des distributions Linux: Debian, Ubuntu, RedHat est SuSE proposent toutes un paquet Certbot, soit directement dans la distribution, soit dans un repository complémentaire de type EPEL.

Il existe également quelques clients très simples car ne nécessitant que très peu de dépendances. Ils sont la plupart du temps codés en Bash, et s’appuient sur les outils UNIX standard que l’on trouve par défaut dans les distributions Linux, tels que sed ou OpenSSL. Les deux clients de ce type les plus répandus sont:

Leur simplicité les rend compatible même avec Busybox, ce qui en rend l’usage possible dans le cadre de l’Internet of Things.

Les clients Windows

Windows étant moins utilisé que Linux en tant que serveur directement exposé sur Internet, l’offre est également moins riche. Le client le plus complet est Certify The Web, mais il a une empreinte non négligeable sur la machine, car il installe un service. Il existe également des clients PowerShell, tels que Posh-ACME, mais sa liste de dépendances ne le rend pas forcément facile à déployer.

Ceci nous a conduit à développer WinCertes, un client ACMEv2 plus léger et plus facile à mettre en oeuvre. En revanche, il ne supporte que la validation HTTP, alors que les autres clients disposent de plug-ins pour gérer la validation DNS depuis les fournisseurs les plus courants, dans une approche très orientée Cloud.

Les solutions commerciales

Il existe également de nombreuses solutions commerciales, utilisant pour beaucoup des bibliothèques OpenSource. Il existe en effet des bibliothèques clientes ACME pour la plupart des langages de programmation, et notamment Java, PHP, PERL ou encore Go.

Parmi les solutions commerciales, signalons notamment les vendeurs de NAS tels que Synology ou Asustor, des box internet comme la Freebox ou la FRITZ!Box, des fournisseurs Cloud comme OVH ou Amazon, et il y en a plein d’autres encore !

Et les DevOps ?

Ansible dispose également d’un module permettant de s’enrôler via ACME. Ce module, acme_certificate supporte ACMEv1 et v2. Il permet donc d’automatiser le déploiement des certificats via ACME dans le cadre d’une démarche DevOps, ce qui permet alors de bannir complètement les tâches manuelles liées à la gestion de certificat, et donc d’économiser sur cet aspect.

Contactez-nous si vous souhaitez élaborer le playbook pour cet usage !

Un petit mot sur les serveurs

Let’s Encrypt fonctionne à l’aide d’un logiciel OpenSource, Boulder. Toutefois, Let’s Encrypt n’émet que des certificats publics, et le fonctionnement du protocole ACME le rend inutilisable sur un réseau d’entreprise.

Pour déployer des certificats sur une réseau privé au sein d’une entreprise, il faut donc soit déployer une instance privée de Boulder, soit utiliser EverTrust TAP, qui vous permet d’ajouter le protocole ACME à votre PKI d’entreprise déjà existante, évitant ainsi d’avoir à déployer de nouvelles Autorités de Certification voire de nouveaux HSMs.