NGINX incorpora soporte nativo para el protocolo ACME
(blog.nginx.org)- NGINX publicó una versión preliminar con soporte nativo para el protocolo ACME, que automatiza la emisión y renovación de certificados SSL/TLS
- Mediante el nuevo módulo basado en Rust
ngx_http_acme_module, ahora es posible solicitar, instalar y renovar certificados solo con la configuración de NGINX, sin herramientas externas - Con esto, se reduce la dependencia de herramientas externas como Certbot y se mejora la seguridad y la independencia de la plataforma
- La versión inicial admite el desafío HTTP-01, y el soporte para TLS-ALPN y DNS-01 está previsto para más adelante
- Se espera que el soporte de ACME desempeñe un papel importante en la automatización de la seguridad no solo en la web, sino también en entornos de IoT y edge computing
Descripción general y cambios principales
- NGINX publicó una versión preliminar de su función de soporte para el protocolo ACME
- A través del nuevo módulo
ngx_http_acme_module, fue diseñado para permitir manejar directamente desde la configuración de NGINX la solicitud, instalación y renovación de certificados - Este soporte de ACME utiliza internamente el NGINX-Rust SDK y se ofrece en forma de módulo dinámico basado en Rust
- Tanto los usuarios de código abierto como los clientes empresariales de NGINX Plus pueden usar esta función
- Al reducir la dependencia de herramientas externas como Certbot, mejora la seguridad y la eficiencia de la gestión de certificados
Introducción al protocolo ACME
- El protocolo ACME (Automated Certificate Management Environment) es un protocolo de comunicación que automatiza la emisión, validación, renovación y revocación de certificados SSL/TLS
- Los clientes pueden gestionar directamente el ciclo de vida de los certificados mediante comunicación automatizada con una CA (Certificate Authority), sin intervención manual de terceros
- Fue desarrollado y publicado en 2015 por Internet Security Research Group (ISRG) como parte del proyecto Let’s Encrypt
- Antes de la aparición de ACME, el proceso de emisión de certificados era manual y tenía mayores costos y posibilidades de error
- La versión más reciente, ACMEv2, añade varias funciones, como métodos de validación y soporte para comodines, aumentando la flexibilidad y la seguridad
Flujo de automatización de certificados basado en ACME en NGINX
- En NGINX, la automatización del ciclo de vida de los certificados con el protocolo ACME se compone de las siguientes 4 etapas
-
1. Configuración del servidor ACME
- Para activar la función ACME, es obligatorio especificar la URL del directorio del servidor ACME con
acme_issuer - Si surge un problema con la emisión del certificado, también se pueden definir opcionalmente datos de contacto del cliente y la ruta para guardar los datos de estado
- Para activar la función ACME, es obligatorio especificar la URL del directorio del servidor ACME con
-
2. Asignación de memoria compartida (zone)
- Con
acme_shared_zone, se puede configurar adicionalmente una zona de memoria compartida para almacenar certificados, claves privadas y datos del desafío - El tamaño predeterminado es de 256K y puede ampliarse según sea necesario
- Con
-
3. Configuración del desafío (Challenge)
- La versión preliminar actual solo admite el desafío HTTP-01, que se usa para verificar la propiedad del dominio
- Para ello, se debe definir en la configuración de NGINX un listener en el puerto 80 y una configuración de respuesta 404 predeterminada
- Más adelante se añadirá soporte para los desafíos TLS-ALPN y DNS-01
-
4. Emisión y renovación de certificados
- Si se agrega la directiva
acme_certificateal bloque del servidor, se puede automatizar la emisión y renovación de certificados TLS para ese dominio - Normalmente, el dominio objetivo para emitir el certificado se especifica con
server_name - Las expresiones regulares y los comodines en
server_nameno son compatibles en la versión preliminar - Mediante las variables del módulo
$acme_certificatey$acme_certificate_key, el certificado y la clave se vinculan automáticamente
- Si se agrega la directiva
Principales ventajas
- El protocolo ACME está en el centro del rápido crecimiento global del uso de HTTPS
- La gestión automatizada de certificados reduce drásticamente los costos del ciclo de vida de los certificados y los errores derivados del trabajo manual
- Al eliminar herramientas externas, se logra una reducción de la superficie de ataque y mayor portabilidad
- Impulsa la estandarización de la seguridad en distintos entornos
Planes a futuro
- Está previsto añadir soporte para los desafíos TLS-ALPN y DNS-01
- Se ampliarán las funciones con base en la retroalimentación de los usuarios
- A medida que se expanda la adopción de IoT, API y edge computing, se espera que ACME desempeñe un papel central en una infraestructura de seguridad automatizada cada vez más amplia
- El soporte nativo de ACME en NGINX servirá como base para convertir la seguridad web, la automatización y la escalabilidad en el estándar del futuro
Primeros pasos
- Los usuarios de código abierto pueden usar el módulo precompilado desde NGINX Linux packages
- Para los clientes empresariales de NGINX Plus, se ofrece como módulo dinámico con soporte de F5
- Consulta la documentación del módulo en NGINX Docs
1 comentarios
Opiniones en Hacker News
El método DNS-01 sería mucho más útil para usuarios de nginx que no están expuestos públicamente (por ejemplo, al usar Nginx Proxy Manager). DNS-01 solo actualiza registros, así que siempre me ha parecido la opción más limpia. De verdad he estado esperando que agreguen esta función.
dns01constep-cay Caddy. La experiencia ha sido muy satisfactoria.Caddy definitivamente es más fácil que nginx. Ofrece templates que cubren distintos servicios, pruebas e incluso servicios especiales para instituciones educativas, mejor logging, un manejo de certificados perfecto para mí y mejores métricas.
Aun así, todavía estoy aprendiendo la parte de plugins. Caddy no tiene rate limiting, y por un bug de Power BI cierto usuario termina pidiendo imágenes 300 mil veces al día, así que eso sí me resulta incómodo.
reloady no encuentra endpoints. Cuantas menos variables complejas haya, mejor.Pero va a pasar bastante tiempo antes de que esta función llegue a los repositorios estables de Ubuntu o Debian.
Además, como todavía no soporta desafíos DNS (certificados wildcard), no parece que vaya a ayudar mucho a Dokku en el corto plazo.
Probé Dokku (y de hecho lo sigo intentando), pero sentí que la barrera de entrada era bastante alta.
Por ejemplo, en Coolify pude crear una GitHub App y conectar despliegues de inmediato, y también he tenido la experiencia de construir/desplegar contenedores con GitHub Actions.
La documentación oficial de Dokku se siente más como una referencia; es como leer una enciclopedia: documentación oficial de inicialización de git en Dokku
Siento que sería más útil una guía inmediata y clara para empezar a desplegar, como la de Coolify: ayuda de integración de GitHub en Coolify
Me gustaría que Dokku tuviera una guía de entrada con apps OSS populares, objetivos paso a paso con hitos claros, y un tutorial que cubra de una sola vez el reverse proxy y varias apps populares en bare metal.
Al final, el objetivo de usar Dokku no es Dokku en sí, sino llegar fácil y rápido al “estado que quiero” con Dokku.
Lo ideal para mí sería un proceso sin fricción en el que puedas “hacer clic en un repo que te gusta y desplegarlo directamente en tu máquina”. Después de eso ya me metería a los detalles del backend.
dehydratedha sido desde hace mucho una herramienta ligera para automatizar renovaciones HTTP-01.Un software sin un release formal v1.0.0 puede cambiar su interfaz en cualquier momento y sin aviso. Una versión mayor 0 tarde o temprano se vuelve una trampa.
Recomiendo exigir a los maintainers que publiquen una versión estable.
dehydratedlleva 7 años en major version 0.También vale la pena ver 0ver.org:
es una filosofía de versionado del tipo “si ya se usa en producción, ya debería ser 1.0.0”.
Más detalles aquí.
ngx_http_acme_modulese incluyó en paquetes para varias distribuciones Linux, pero Debian stable quedó fuera.Según la lista oficial de paquetes de nginx, aparecen oldstable/oldoldstable, pero no Debian 13 Trixie, que salió hace 4 días.
nginx recién ahora soporta algo que Caddy y Traefik ya hacían hace 5 años.
Aun así, me parece un buen cambio. Ahora será más cómodo porque ya no hará falta ejecutar certbot manualmente.
Eso significa que nginx está incorporando esta función con unos 9 o 10 años de retraso.
Siempre me ha parecido mejor la filosofía Unix de que cada cosa haga bien una sola tarea y se pueda combinar.
Una “herramienta” que quiere hacerlo todo inevitablemente va a quedarse corta en alguna parte.
Aunque certbot intente hacer la configuración automáticamente, fuera de los entornos básicos casi nunca funciona bien.
Me da la impresión de que manejarlo todo directamente dentro de nginx termina siendo una mejor solución.
También me pregunto si esto abre la puerta a usar fácilmente alternativas además de Let's Encrypt.
Caddy es realmente útil porque trae muchas funciones convenientes listas para usar.
En lo personal, la razón por la que no he podido cambiarme por completo a Caddy es que necesito los módulos de
rate limitingygeode nginx.