NGINX introduit la prise en charge native du protocole ACME
(blog.nginx.org)- NGINX a dévoilé une version preview prenant en charge nativement le protocole ACME, qui automatise l’émission et le renouvellement des certificats SSL/TLS
- Grâce au nouveau module
ngx_http_acme_modulebasé sur Rust, il devient possible de demander, installer et renouveler des certificats uniquement via la configuration NGINX, sans outil externe - Cela réduit la dépendance à des outils externes comme Certbot et améliore la sécurité ainsi que l’indépendance vis-à-vis de la plateforme
- La version initiale prend en charge le challenge HTTP-01 ; la prise en charge de TLS-ALPN et DNS-01 est prévue par la suite
- La prise en charge d’ACME devrait aussi jouer un rôle important dans l’automatisation de la sécurité au-delà du web, notamment dans les environnements IoT et edge computing
Vue d’ensemble et principaux changements
- NGINX a publié une version preview de la prise en charge du protocole ACME
- Le nouveau module
ngx_http_acme_moduleest conçu pour permettre de gérer directement, depuis la configuration NGINX, la demande, l’installation et le renouvellement des certificats - Cette prise en charge d’ACME s’appuie en interne sur le NGINX-Rust SDK et est fournie sous forme de module dynamique basé sur Rust
- Cette fonctionnalité est disponible aussi bien pour les utilisateurs open source que pour les clients enterprise de NGINX Plus
- En réduisant la dépendance à des outils externes comme Certbot, elle améliore la sécurité et l’efficacité de la gestion des certificats
Présentation du protocole ACME
- Le protocole ACME (Automated Certificate Management Environment) est un protocole de communication qui automatise l’émission, la validation, le renouvellement et la révocation des certificats SSL/TLS
- Grâce à une communication automatisée avec la CA (Certificate Authority), le client peut gérer directement le cycle de vie des certificats sans intervention manuelle d’un intermédiaire
- Il a été développé et publié en 2015 par l’Internet Security Research Group (ISRG) dans le cadre du projet Let’s Encrypt
- Avant l’arrivée d’ACME, le processus d’émission des certificats était plus manuel, plus coûteux et plus exposé aux erreurs
- La version actuelle, ACMEv2, ajoute diverses fonctionnalités comme différents modes de validation et la prise en charge des wildcards, ce qui renforce sa flexibilité et sa sécurité
Flux d’automatisation des certificats avec ACME dans NGINX
- Dans NGINX, l’automatisation du cycle de vie des certificats via le protocole ACME se déroule en 4 étapes
-
1. Configuration du serveur ACME
- Pour activer la fonctionnalité ACME, il faut impérativement spécifier l’URL du répertoire du serveur ACME avec
acme_issuer - En cas d’émission de certificat, il est aussi possible d’indiquer en option des informations de contact client, le chemin de stockage des données d’état, etc.
- Pour activer la fonctionnalité ACME, il faut impérativement spécifier l’URL du répertoire du serveur ACME avec
-
2. Allocation de mémoire partagée (zone)
- Avec
acme_shared_zone, il est possible de configurer en plus une zone de mémoire partagée pour stocker les certificats, les clés privées et les données de challenge - La taille par défaut est de 256K, extensible selon les besoins
- Avec
-
3. Configuration du challenge
- La version preview actuelle ne prend en charge que le challenge HTTP-01, utilisé pour vérifier la propriété du domaine
- Pour cela, il faut définir dans la configuration NGINX un listener sur le port 80 ainsi qu’une réponse 404 par défaut
- La prise en charge des challenges TLS-ALPN et DNS-01 est prévue ultérieurement
-
4. Émission et renouvellement des certificats
- En ajoutant la directive
acme_certificateà un bloc serveur, il devient possible d’automatiser l’émission et le renouvellement du certificat TLS pour le domaine concerné - Le domaine visé par l’émission du certificat est généralement indiqué via
server_name - Les expressions régulières et les wildcards dans
server_namene sont pas pris en charge dans cette version preview - Les variables du module
$acme_certificateet$acme_certificate_keypermettent d’associer automatiquement le certificat et la clé
- En ajoutant la directive
Principaux avantages
- Le protocole ACME est au cœur de la forte progression de l’usage de HTTPS dans le monde
- L’automatisation de la gestion des certificats réduit fortement les coûts de gestion du cycle de vie des certificats et les erreurs dues aux manipulations manuelles
- La suppression des outils externes permet de réduire la surface d’attaque et d’améliorer la portabilité
- Elle favorise aussi la standardisation de la sécurité dans des environnements variés
Feuille de route
- Ajout prévu de la prise en charge des challenges TLS-ALPN et DNS-01
- Extension des fonctionnalités sur la base des retours utilisateurs
- Avec l’adoption croissante de l’IoT, des API et de l’edge computing, ACME devrait jouer à l’avenir un rôle central dans une infrastructure de sécurité automatisée sur un périmètre toujours plus large
- La prise en charge native d’ACME par NGINX devrait servir de base pour faire de la sécurité web, de l’automatisation et de la scalabilité des standards d’avenir
Bien démarrer
- Les utilisateurs open source peuvent utiliser le module précompilé via les packages Linux NGINX
- Pour les clients enterprise de NGINX Plus, il est fourni sous forme de module dynamique pris en charge par F5
- Voir la documentation du module dans NGINX Docs
1 commentaires
Avis Hacker News
La méthode DNS-01 serait bien plus utile pour les utilisateurs de nginx qui ne sont pas exposés publiquement (par exemple avec Nginx Proxy Manager). DNS-01 se contente de mettre à jour un enregistrement, donc j’ai toujours trouvé que c’était l’approche la plus propre. J’attends vraiment l’arrivée de cette fonctionnalité.
Caddy est clairement plus simple que nginx. Il fournit des templates couvrant divers services, des tests et même des services spécifiques aux établissements d’enseignement, ainsi qu’un meilleur logging, une gestion des certificats parfaite pour mon usage et de meilleures métriques.
En revanche, j’en suis encore à me former côté plugins : caddy n’a pas de rate limiting, et à cause d’un bug de Power BI, un certain utilisateur demande une image 300 000 fois par jour, donc ce n’est pas idéal non plus.
Mais il faudra probablement encore du temps avant que cette fonctionnalité n’arrive dans les dépôts stables Ubuntu ou Debian.
En plus, comme le challenge DNS (certificats wildcard) n’est pas encore pris en charge, cela ne devrait pas beaucoup aider Dokku à court terme.
J’ai essayé Dokku (et j’essaie encore), mais la barrière à l’entrée m’a semblé assez élevée.
Par exemple, avec Coolify, il suffisait de créer une GitHub App pour connecter immédiatement le déploiement, et j’ai aussi déjà une expérience de build/déploiement de conteneurs avec GitHub Actions.
La documentation officielle de dokku ressemble plus à un manuel de référence, on a l’impression de lire une encyclopédie : documentation officielle sur l’initialisation Git de dokku
J’ai l’impression qu’un guide de démarrage vraiment direct, qui aide à déployer tout de suite comme Coolify, serait plus utile : aide à l’intégration GitHub de coolify
Ce serait bien d’avoir pour Dokku des guides d’installation d’applications OSS populaires, un guide d’introduction avec des objectifs et validations étape par étape, ainsi qu’un tutoriel qui couvre d’un coup le reverse proxy sur bare metal et plusieurs applications populaires.
Au final, le but quand on utilise Dokku n’est pas Dokku lui-même, mais d’atteindre facilement et rapidement « l’état souhaité » grâce à Dokku.
Idéalement, je veux un processus sans douleur où je peux « cliquer sur un dépôt qui me plaît et le déployer immédiatement sur ma machine ». Ensuite seulement, j’ai envie d’explorer les détails de l’infrastructure sous-jacente.
Un logiciel sans release officielle v1.0.0 peut voir son interface changer à tout moment sans préavis. Le major version 0 finit toujours par devenir un piège.
Je recommande de demander aux mainteneurs de publier une version stable.
dehydrated est bloqué au major version 0 depuis 7 ans.
0ver.org vaut aussi le détour :
c’est une philosophie de versioning du type « si c’est utilisé en production, ça devrait déjà être en 1.0.0 ».
Plus de détails ici.
ngx_http_acme_modulea été inclus dans les paquets de plusieurs distributions Linux, mais Debian stable manque à l’appel.D’après la liste officielle des paquets nginx, oldstable et oldoldstable sont là, mais Debian 13 Trixie, sorti il y a 4 jours, n’y est pas.
nginx ne fait qu’ajouter maintenant ce que Caddy et Traefik faisaient déjà il y a 5 ans.
Cela dit, je pense que c’est une bonne évolution. Au moins, on n’aura plus besoin d’exécuter certbot soi-même.
nginx introduit donc cette fonctionnalité avec environ 9 à 10 ans de retard.
À l’origine, je trouve meilleure la philosophie Unix consistant à bien faire une seule chose et à pouvoir combiner les outils.
Les « outils » qui essaient de tout faire finissent inévitablement par être moins bons sur au moins un aspect.
Même quand certbot essaie d’automatiser la configuration, ça marche mal dès qu’on sort d’un environnement standard.
Le fait de tout gérer directement dans nginx me paraît finalement être une meilleure solution.
Je me demande aussi si cela ouvre la voie à une utilisation simple d’alternatives à Let’s Encrypt.
Caddy est vraiment pratique, avec beaucoup de fonctionnalités prêtes à l’emploi.
Personnellement, si je n’ai pas encore complètement basculé vers Caddy, c’est à cause de mon besoin des modules rate limiting et geo de nginx.