LabCA - serveur ACME auto-hebergée

Posted on Fri 01 December 2023 in Internet

J'ai installé un serveur ACME auto-hebergée pour des besoins internes (mon super LAN à la maison) 😀.

L'idée est venue suite à l'écoute de l'épisode du podcast NoLimitSecu avec Christophe Brocas - Lien de l'épisode et au visionnage de la conférence Hack.lu 2023 - ACME: Benefits Of An Internet Security Protocol In Your Network.

Dans l'épisode et la conférence il explique la mise en place d'un serveur proxy ACME relié a une PKI existante, afin de permettre à des clients internes d'effectuer des demandes de certificats simplement et automatiquement, tous les bénéfices de LetsEncrypt mais en interne sur le LAN!

Lors de la conférence, Christophe Brocas évoque pour la partie serveur l'utilisation de Serles ACME, solution complète mais que je trouve un peu rustre pour ce que je veux en faire, j'avais déjà bidouillé sans grand succès avec Step-CA, et finalement je suis tombé sur le projet LabCA (repo GitHub), qui à l'avantage de présenter une interface Web simple et une installation rapide sous forme de Containers.

Pré-requis

  • Une VM pour installer ça
  • Un serveur DNS interne, ça aide, genre Samba AD par ex.
  • Deux bras, deux jambes, un cerveau

Installation

La préconisation est de l'installer sur une VM dédiée, c'est pas plus mal et j'ai un Proxmox sous la main donc c'est ce que j'ai fait.

La procédure d'installation est plutôt complète, sur une VM fresh, j'ai pris la technique rapide et dégueu :

curl -sSL https://raw.githubusercontent.com/hakwerk/labca/master/install | bash

Bon, bah ça marche, ça démarre, on suis les étapes de création de la CA, identifiants/mot de passe tout ça et hop la belle Web-UI.

labca_homepage

Déploiement CA

Un pré-requis après la première installation est de déployer la racine de certificats sur les serveurs qui seront clients de ce serveur ACME, logiquement tous donc, pour du Debian par ex. :

cp ca.crt /usr/local/share/ca-certificates/ca.crt
update-ca-certificates

Automatisez ça avec Ansible, au boulot.

Utilisation

On peux maintenant faire des demandes de clé+certificats au serveur ACME

A partir de l'interface web, pas de possibilité de faire des demandes de clé+certificats, logique c'est un serveur ACME.

Exemple de demande avec le client certbot pour un serveur Nginx avec le virtualhost longbottom.poudlard.lan :

certbot --agree-tos --server https://acme.poudlard.lan/directory certonly -d longbottom.poudlard.lan --nginx -m admin@poudlard.lan

Si tout est bien paramétré (CA à importée sur la VM cliente + certbot), ça fonctionne directement c'est magnifique.

Il existe bien d'autres clients ACME, certbot étant le client de base pour LetsEncrypt, ça permet de mettre les même routines de renouvellement en place si vous les avez déjà sur des serveurs publics, c'est pratique.

L'avantage de LabCA à mon gout, c'est les différentes vues dans l'interface Web qui permettent de voir les certificats.

  • Certificats générés :

labca_certificates

  • Certificats révoqués :

labca_revoked

Et la CRL fonctionne ! (enfin... ça dépends du navigateur et du cache et de Mercure en rétrograde 🙃)

Conclusion

Quelques conclusions rapides :

  • C'est simple et rapide à mettre en place
  • Ca marche.
  • Idéal pour un HomeLab
  • Egalement pour des établissements scolaire, stages de BTS SIO 😉
  • A l'echelle je ne sais pas si c'est pertinent, il doit exister des solutions entreprise "plus complètes"

Sources