ACME (Automated Certificate Management Environment) e o protocolo que torna possiveis certificados SSL gratuitos e automatizados. E como o Let’s Encrypt — e seu cliente ACME (GetHTTPS, Certbot, acme.sh) — realmente se comunica com a Autoridade Certificadora.
Definido na RFC 8555, o ACME substituiu o antigo processo manual (enviar CSRs por email para uma CA, esperar revisao humana) por um protocolo totalmente automatizado e criptograficamente seguro.
Como o ACME funciona — os 5 passos
┌──────────┐ ┌──────────────┐
│ Client │ ① Account Registration │ CA Server │
│ (GetHTTPS)│ ──────────────────────────→ │ (Let's Encrypt)
│ │ ② New Order (domains) │ │
│ │ ──────────────────────────→ │ │
│ │ ③ Complete Challenges │ │
│ │ ←─────────────────────────── │ │
│ │ ──────────────────────────→ │ │
│ │ ④ Finalize (send CSR) │ │
│ │ ──────────────────────────→ │ │
│ │ ⑤ Download Certificate │ │
│ │ ←─────────────────────────── │ │
└──────────┘ └──────────────┘
Passo 1: Registro da conta
O cliente gera um par de chaves de conta ACME e registra a chave pública na CA. Essa chave identifica você em futuras requisições — cada mensagem ACME é assinada com ela.
Nenhum email, nenhuma senha, nenhuma informação pessoal necessária.
Passo 2: Novo pedido
O cliente submete uma lista de nomes de domínio para os quais deseja um certificado. A CA cria um “pedido” e retorna um conjunto de “autorizações” — uma por domínio — cada uma com desafios a completar.
Passo 3: Completar desafios
Para cada domínio, o cliente deve provar o controle. A CA oferece tipos de desafio:
| Desafio | Como funciona | Caso de uso |
|---|---|---|
| HTTP-01 | Colocar um arquivo em /.well-known/acme-challenge/ | Mais comum, mais simples |
| DNS-01 | Adicionar um registro TXT em _acme-challenge.domain | Wildcards, sem porta 80 |
| TLS-ALPN-01 | Responder na porta 443 com um certificado TLS especial | Quando porta 80 esta bloqueada, sem acesso DNS |
O cliente completa o desafio, depois informa a CA para verificar. A CA verifica a partir de seus servidores — se o desafio passa, a autorização e marcada como válida.
Passo 4: Finalizar (enviar CSR)
Após todos os domínios serem autorizados, o cliente envia um CSR (Certificate Signing Request) contendo a chave pública para o certificado. A CA o assina e cria o certificado.
Passo 5: Baixar certificado
O cliente baixa a cadeia de certificados assinada — seu certificado + o certificado CA intermediário. Pronto.
Modelo de segurança do ACME
Cada requisição ACME é assinada com JWS (JSON Web Signature) usando a chave da conta. Isso previne:
- Ataques de replay — cada requisição tem um nonce único
- Adulteracao — a assinatura cobre todo o corpo da requisição
- Personificacao — apenas o detentor da chave da conta pode fazer requisições
A chave da conta nunca sai do cliente. Com GetHTTPS, ela é gerada no seu navegador via Web Crypto API.
Como o GetHTTPS usa ACME
GetHTTPS implementa o protocolo ACME completo em JavaScript rodando no seu navegador:
- Chave da conta gerada com
crypto.subtle.generateKey()(Web Crypto API) - Chave do certificado gerada da mesma forma
- Mensagens ACME assinadas com
crypto.subtle.sign() - CSR construido com a biblioteca pkijs
- Comunicação HTTPS direta com
acme-v02.api.letsencrypt.org
Sem proxy do lado do servidor, sem middleware. Seu navegador fala diretamente com a API ACME do Let’s Encrypt. Isso e único — a maioria dos clientes ACME roda em um servidor.
Clientes ACME comparados
| Cliente | Roda em | ACME v2 | Auto-renovação | Linguagem |
|---|---|---|---|---|
| GetHTTPS | Navegador | ✅ | ❌ Manual | JavaScript |
| Certbot | CLI do servidor | ✅ | ✅ | Python |
| acme.sh | CLI do servidor | ✅ | ✅ | Shell |
| Caddy | Servidor web | ✅ | ✅ | Go |
| Traefik | Proxy reverso | ✅ | ✅ | Go |
| Lego | Biblioteca CLI | ✅ | ✅ | Go |
CAs que suportam ACME
ACME foi criado pelo Let’s Encrypt mas agora é um padrão aberto usado por múltiplas CAs:
| CA | URL do diretorio ACME | Gratuito? |
|---|---|---|
| Let’s Encrypt | acme-v02.api.letsencrypt.org/directory | ✅ |
| ZeroSSL | acme.zerossl.com/v2/DV90 | Gratuito limitado |
| Buypass | api.buypass.com/acme/directory | ✅ |
| Google Trust Services | Via Google Cloud ACME | ✅ |
| DigiCert | Endpoint ACME Enterprise | Pago |
| Sectigo | Endpoint ACME Enterprise | Pago |
Perguntas frequentes
ACME é o mesmo que Let’s Encrypt?
Não. ACME e o protocolo (RFC 8555). Let’s Encrypt é uma Autoridade Certificadora que usa ACME. Outras CAs (ZeroSSL, Buypass, Google) também suportam ACME. Pense nisso como HTTP vs Google — HTTP e o protocolo, Google é um serviço que o usa.
Posso implementar meu próprio cliente ACME?
Sim. O protocolo e totalmente especificado na RFC 8555. GetHTTPS é um exemplo de implementacao baseada em navegador. Bibliotecas existem para a maioria das linguagens (certbot para Python, lego para Go, acme.js para JavaScript).
O que e ACME v2?
ACME v2 e a versão atual (RFC 8555), que adicionou suporte a certificados wildcard e substituiu o rascunho do protocolo v1. Todos os clientes ACME modernos usam v2. O Let’s Encrypt desligou o endpoint v1 em 2021.
O que acontece se o servidor ACME ficar fora do ar?
Certificados existentes continuam funcionando (eles não ligam para casa). Você apenas não pode emitir ou renovar até o servidor se recuperar. O Let’s Encrypt tem alta disponibilidade e infraestrutura redundante.