ACME (Automated Certificate Management Environment) es el protocolo que hace posibles los certificados SSL gratuitos y automatizados. Es cómo Let’s Encrypt — y tu cliente ACME (GetHTTPS, Certbot, acme.sh) — se comunica realmente con la Autoridad Certificadora.
Definido en RFC 8555, ACME reemplazó el antiguo proceso manual (enviar CSRs por correo a una CA, esperar revisión humana) con un protocolo completamente automatizado y criptográficamente seguro.
Cómo funciona ACME — los 5 pasos
┌──────────┐ ┌──────────────┐
│ Client │ ① Account Registration │ CA Server │
│ (GetHTTPS)│ ──────────────────────────→ │ (Let's Encrypt)
│ │ ② New Order (domains) │ │
│ │ ──────────────────────────→ │ │
│ │ ③ Complete Challenges │ │
│ │ ←─────────────────────────── │ │
│ │ ──────────────────────────→ │ │
│ │ ④ Finalize (send CSR) │ │
│ │ ──────────────────────────→ │ │
│ │ ⑤ Download Certificate │ │
│ │ ←─────────────────────────── │ │
└──────────┘ └──────────────┘
Paso 1: Registro de cuenta
El cliente genera un par de claves de cuenta ACME y registra la clave pública con la CA. Esta clave te identifica en futuras solicitudes — cada mensaje ACME se firma con ella.
Sin correo electrónico, sin contraseña, sin información personal requerida.
Paso 2: Nueva orden
El cliente envía una lista de nombres de dominio para los que quiere un certificado. La CA crea una «orden» y devuelve un conjunto de «autorizaciones» — una por dominio — cada una con desafíos que completar.
Paso 3: Completar desafíos
Para cada dominio, el cliente debe probar el control. La CA ofrece tipos de desafío:
| Desafío | Cómo funciona | Caso de uso |
|---|---|---|
| HTTP-01 | Colocar un archivo en /.well-known/acme-challenge/ | Más común, más simple |
| DNS-01 | Añadir un registro TXT a _acme-challenge.domain | Comodines, sin puerto 80 |
| TLS-ALPN-01 | Responder en el puerto 443 con un certificado TLS especial | Cuando el puerto 80 está bloqueado, sin acceso DNS |
El cliente completa el desafío, luego le dice a la CA que verifique. La CA comprueba desde sus servidores — si el desafío pasa, la autorización se marca como válida.
Paso 4: Finalizar (enviar CSR)
Después de que todos los dominios estén autorizados, el cliente envía un CSR (Certificate Signing Request) que contiene la clave pública para el certificado. La CA lo firma y crea el certificado.
Paso 5: Descargar certificado
El cliente descarga la cadena de certificados firmada — tu certificado + el certificado de la CA intermedia. Listo.
Modelo de seguridad de ACME
Cada solicitud ACME se firma con JWS (JSON Web Signature) usando la clave de la cuenta. Esto previene:
- Ataques de repetición — cada solicitud tiene un nonce único
- Manipulación — la firma cubre todo el cuerpo de la solicitud
- Suplantación — solo el titular de la clave de la cuenta puede hacer solicitudes
La clave de la cuenta nunca sale del cliente. Con GetHTTPS, se genera en tu navegador vía la Web Crypto API.
Cómo GetHTTPS usa ACME
GetHTTPS implementa el protocolo ACME completo en JavaScript ejecutándose en tu navegador:
- Clave de cuenta generada con
crypto.subtle.generateKey()(Web Crypto API) - Clave del certificado generada de la misma manera
- Mensajes ACME firmados con
crypto.subtle.sign() - CSR construido con la librería pkijs
- Comunicación directa HTTPS con
acme-v02.api.letsencrypt.org
Sin proxy del lado del servidor, sin middleware. Tu navegador habla directamente con la API ACME de Let’s Encrypt. Esto es único — la mayoría de los clientes ACME se ejecutan en un servidor.
Clientes ACME comparados
| Cliente | Se ejecuta en | ACME v2 | Renovación automática | Lenguaje |
|---|---|---|---|---|
| GetHTTPS | Navegador | Sí | No, manual | JavaScript |
| Certbot | CLI del servidor | Sí | Sí | Python |
| acme.sh | CLI del servidor | Sí | Sí | Shell |
| Caddy | Servidor web | Sí | Sí | Go |
| Traefik | Proxy inverso | Sí | Sí | Go |
| Lego | Librería CLI | Sí | Sí | Go |
CAs que soportan ACME
ACME fue creado por Let’s Encrypt pero ahora es un estándar abierto usado por múltiples CAs:
| CA | URL del directorio ACME | ¿Gratis? |
|---|---|---|
| Let’s Encrypt | acme-v02.api.letsencrypt.org/directory | Sí |
| ZeroSSL | acme.zerossl.com/v2/DV90 | Limitado gratis |
| Buypass | api.buypass.com/acme/directory | Sí |
| Google Trust Services | Vía Google Cloud ACME | Sí |
| DigiCert | Endpoint ACME empresarial | De pago |
| Sectigo | Endpoint ACME empresarial | De pago |
Preguntas frecuentes
¿ACME es lo mismo que Let’s Encrypt?
No. ACME es el protocolo (RFC 8555). Let’s Encrypt es una Autoridad Certificadora que usa ACME. Otras CAs (ZeroSSL, Buypass, Google) también soportan ACME. Piénsalo como HTTP vs Google — HTTP es el protocolo, Google es un servicio que lo usa.
¿Puedo implementar mi propio cliente ACME?
Sí. El protocolo está completamente especificado en RFC 8555. GetHTTPS es un ejemplo de implementación basada en navegador. Existen librerías para la mayoría de los lenguajes (certbot para Python, lego para Go, acme.js para JavaScript).
¿Qué es ACME v2?
ACME v2 es la versión actual (RFC 8555), que añadió soporte para certificados comodín y reemplazó el protocolo borrador v1. Todos los clientes ACME modernos usan v2. Let’s Encrypt cerró el endpoint v1 en 2021.
¿Qué pasa si el servidor ACME está caído?
Los certificados existentes siguen funcionando (no llaman a casa). Simplemente no puedes emitir ni renovar hasta que el servidor se recupere. Let’s Encrypt tiene un alto tiempo de actividad y una infraestructura redundante.