Hello les gens ! j’espère que tout le monde va bien. Aujourd’hui, on reste dans la pure technique avec un système que je suis en train d’évaluer chez nous, pour utiliser et dans la mesure du possible automatiser la mise à jours de certificats SSL publiques via Let’s Encrypt et injecter ceux-ci dans nos load balancers F5/BigIP.

Pour l’instant, et après pas mal d’heures de bidouillage, de tests et de difficultés diverses, je suis enfin parvenu à mes fins grâce à des scripts Shell. Comme je suis plus habitué à plutôt travailler en Shell, je vais passer la main à un collègue, lui-même spécialiste d’Ansible, pour automatiser le tout ensuite via des playbooks. Néanmoins, en attendant, je vous partage mes découvertes et les bases sur lesquelles je me suis appuyé pour simplifier au maximum la gestion de Let’s Encrypt, tout en gardant le contrôle des certificats.

Un p’tit schéma

Voici le principe général, un schéma valant toujours mieux qu’un long discours 🙂

En pratique, c’est relativement connu et simple : j’utilise donc Nginx Proxy Manager pour centraliser la gestion des certificats, à la fois intuitive et suivie. Deux raisons motivent ce choix : la simplicité d’utilisation et le suivi automatique des renouvellements. Même si l’objectif à terme est d’automatiser l’ensemble du processus, la confiance ne doit jamais exclure le contrôle, qu’il soit humain ou technique.

J’ai ainsi développé un script qui exploite l’API REST de nos load balancers F5 pour y injecter les certificats préalablement récupérés via NPM.

Nginx Proxy Manager

Pour votre info, globalement NPM ressemble à ça, pour ceux qui ne connaissent pas :

NPM est un reverse proxy basé sur Nginx, comme peut l’être Traefik, qui permet en plus et très facilement de gérer la sécurité SSL de tous vos points d’accès web frontend. Idéal pour un petit Home Lab. Pour ce qui me concerne, je n’utilise que les fonctions de pilotages des certificat Let’s Encrypt en coordination avec OVH qui fournit une API direct avec notamment la gestion de ses domaines.

Le script shell principal

Voici le script shell en question (franchement , ça ne s’invente pas … si vous n’êtes pas un spécialiste de ces environnements, je trouve cela assez compliqué chez Big IP, honnêtement) :

Vous noterez que le script en appelle un autre dont le role permets tout simplement d’extraire les chemins des fichiers .pem (clé, chaine, certificat) en fonction des domaines gérés sur NPM. Voici ce script :

Un exemple de sortie interactive de ce script :

j’ai également un script qui me sort la list de tous les certificats gérés par NPM, je ne l’utilise pas ici, car pas besoin, mais ça permet d’avoir une vue d’ensemble :

Ce qui donne ce genre de choses :

Vous voyez, c’est relativement basique : il s’agit de transformer cela en un playbook Ansible pour obtenir une version plus industrielle et entièrement automatisée. À terme, il suffira d’appuyer sur un bouton et de superviser le renouvellement des certificats une fois par semaine, via une procédure dédiée.

L’évolution souhaitée, à plus long terme, est d’automatiser intégralement le processus et de ne plus utiliser du tout Nginx Proxy Manager. Mais cela fera partie de la prochaine étape via par exemple certbot ou d’autres scripts Let’s Encrypt… mais chaque chose en son temps !

https://nginxproxymanager.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *