Pular para conteúdo

acme: Módulo de gerenciamento automático de certificados (ACMEv2) para NGINX

Instalação

Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:

  • RedHat Enterprise Linux 7, 8, 9 e 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-acme
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-acme

Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:

load_module modules/ngx_http_acme_module.so;

Este documento descreve o nginx-module-acme v0.4.1 lançado em 01 de maio de 2026.


Status do Projeto: Ativo – O projeto alcançou um estado estável e utilizável e está sendo desenvolvido ativamente. Suporte da Comunidade Fórum da Comunidade Licença Covenant do Contribuidor

nginx-acme

nginx-acme é um módulo NGINX com a implementação do protocolo de gerenciamento automático de certificados (ACMEv2).

O módulo implementa as seguintes especificações:

  • RFC8555 (Ambiente de Gerenciamento Automático de Certificados) com limitações:
    • Apenas o tipo de desafio HTTP-01 é suportado
  • RFC8737 (Extensão de Negociação de Protocolo de Camada de Aplicação TLS ACME (ALPN))
  • RFC8738 (Extensão de Validação de Identificador IP ACME)
  • RFC9773 (Extensão de Informações de Renovação ACME (ARI))
  • draft-ietf-acme-profiles (Extensão de Perfis ACME, versão 01)

Começando

checkout, configure e construa o NGINX em ../nginx

cd nginx-acme export NGINX_BUILD_DIR=$(realpath ../nginx/objs) cargo build --release

O resultado estará localizado em `target/release/libnginx_acme.so`.

Outra maneira é usar o script de configuração fornecido:

```sh
# no diretório de origem do NGINX
auto/configure \
    --with-compat \
    --with-http_ssl_module \
    --add-[dynamic-]module=/path/to/nginx-acme

O resultado estará localizado em objs/ngx_http_acme_module.so.

Atualmente, esse método produz uma biblioteca ligeiramente maior, pois não instruímos o linker a realizar LTO e remover código não utilizado.

Testando

O repositório contém um conjunto de testes de integração baseado nos nginx-tests. O seguinte comando irá construir o módulo e executar os testes:

# Caminho para o checkout da fonte do nginx, padrão para ../nginx se não especificado.
export NGINX_SOURCE_DIR=$(realpath ../nginx)
# Caminho para o checkout dos nginx-tests; padrão para ../nginx/tests se não especificado.
export NGINX_TESTS_DIR=$(realpath ../nginx-tests)

make test

A maioria dos testes requer o binário do servidor de teste pebble no caminho ou em um local especificado pela variável de ambiente TEST_NGINX_PEBBLE_BINARY.

Como Usar

Adicione o módulo à configuração do NGINX e configure conforme descrito abaixo. Observe que este módulo requer uma configuração de resolver no bloco http.

Exemplo de Configuração

resolver 127.0.0.1:53;

acme_issuer example {
    uri         https://acme.example.com/directory;
    # contact     [email protected];
    state_path  /var/cache/nginx/acme-example;
    accept_terms_of_service;
}

acme_shared_zone zone=ngx_acme_shared:1M;

server {
    listen 443 ssl;
    server_name  .example.test
                 192.0.2.1      # não suportado por alguns servidores ACME
                 2001:db8::1    # não suportado por alguns servidores ACME
                 ;

    acme_certificate example;

    ssl_certificate       $acme_certificate;
    ssl_certificate_key   $acme_certificate_key;

    # não analise o certificado em cada solicitação
    ssl_certificate_cache max=2;
}

server {
    # o listener na porta 80 é necessário para processar desafios ACME HTTP-01
    listen 80;

    location / {
        return 404;
    }
}

Diretivas

[!IMPORTANTE] A referência abaixo reflete a versão atual em desenvolvimento. Consulte a documentação do ngx_http_acme_module no nginx.org para a versão mais recente lançada.

acme_issuer

Sintaxe: acme_issuer name { ... }

Padrão: -

Contexto: http

Define um objeto emissor de certificado ACME.

uri

Sintaxe: uri uri

Padrão: -

Contexto: acme_issuer

A URL do diretório do servidor ACME. Esta diretiva é obrigatória.

account_key

Sintaxe: account_key alg[:size] | file

Padrão: -

Contexto: acme_issuer

A chave privada da conta usada para autenticação de solicitações.

Valores aceitos:

  • ecdsa:256/384/521 para algoritmos de assinatura JSON Web ES256, ES384 ou ES512
  • rsa:2048/3072/4096 para RS256.
  • Caminho do arquivo para uma chave existente, usando um dos algoritmos acima.

As chaves de conta geradas são preservadas entre recarregamentos, mas serão perdidas na reinicialização, a menos que o state_path esteja configurado.

challenge

Sintaxe: challenge type

Padrão: http-01

Contexto: acme_issuer

Esta diretiva apareceu na versão 0.2.0.

Especifica o tipo de desafio ACME a ser usado para o emissor.

Valores aceitos:

  • http-01 (http)
  • tls-alpn-01 (tls-alpn)

Desafios ACME são versionados. Se um nome não versionado for especificado, o módulo seleciona automaticamente a versão mais recente implementada.

common_name_in_csr

Sintaxe: common_name_in_csr on | off

Padrão: off

Contexto: acme_issuer

Esta diretiva apareceu na versão 0.4.0.

Se habilitado, define o Nome Comum do Sujeito na solicitação de certificado para o primeiro nome DNS ou o primeiro endereço IP fornecido.

Observe que habilitar esta opção pode resultar em solicitações de certificado rejeitadas.

contact

Sintaxe: contact URL

Padrão: -

Contexto: acme_issuer

Define um array de URLs que o servidor ACME pode usar para contatar o cliente sobre problemas da conta. O esquema mailto: será usado, a menos que especificado explicitamente.

external_account_key

Sintaxe: external_account_key kid file

Padrão: -

Contexto: acme_issuer

Esta diretiva apareceu na versão 0.2.0.

Especifica um identificador de chave kid e um file com a chave MAC para autorização de conta externa.

O valor data:key pode ser especificado em vez do file, que carrega uma chave diretamente da configuração sem usar arquivos intermediários.

Em ambos os casos, espera-se que a chave esteja codificada em base64url.

preferred_chain

Sintaxe: preferred_chain name

Padrão: -

Contexto: acme_issuer

Esta diretiva apareceu na versão 0.3.0.

Especifica a cadeia de certificados preferida.

Se o servidor ACME oferecer várias cadeias de certificados, prefira a cadeia com o certificado superior emitido a partir do Nome Comum do Sujeito name. Se não houver correspondências, a cadeia padrão será usada.

profile

Sintaxe: profile name [require]

Padrão: -

Contexto: acme_issuer

Esta diretiva apareceu na versão 0.3.0.

Solicita o perfil de certificado name do servidor ACME.

O parâmetro require fará com que as renovações de certificados falhem se o servidor não suportar o perfil especificado.

ssl_trusted_certificate

Sintaxe: ssl_trusted_certificate file

Padrão: pacote CA do sistema

Contexto: acme_issuer

Especifica um file com certificados CA confiáveis no formato PEM usados para verificar o certificado do servidor ACME.

ssl_verify

Sintaxe: ssl_verify on | off

Padrão: on

Contexto: acme_issuer

Habilita ou desabilita a verificação do certificado do servidor ACME.

state_path

Sintaxe: state_path path | off

Padrão: acme_<name>

Contexto: acme_issuer

Define um diretório para armazenar os dados do módulo que podem ser persistidos entre reinicializações. Isso pode melhorar o tempo de carregamento ao pular algumas solicitações na inicialização, e evitar atingir limites de taxa de solicitações no servidor ACME.

O diretório contém conteúdo sensível, como a chave da conta, certificados emitidos e chaves privadas.

O parâmetro off (0.2.0) desabilita o armazenamento das informações da conta e certificados emitidos no disco.

Antes da versão 0.2.0, o diretório de estado não era criado por padrão.

accept_terms_of_service

Sintaxe: accept_terms_of_service

Padrão: -

Contexto: acme_issuer

Concorda com os termos de serviço sob os quais o servidor ACME será usado. Alguns servidores exigem a aceitação dos termos de serviço antes do registro da conta. Os termos geralmente estão disponíveis no site do servidor ACME, e a URL será impressa no log de erros, se necessário.

acme_shared_zone

Sintaxe: acme_shared_zone zone=name:size

Padrão: zone=ngx_acme_shared:256k

Contexto: http

Permite aumentar o tamanho do armazenamento em memória do módulo. A zona de memória compartilhada será usada para armazenar os certificados emitidos, chaves e dados de desafio para todos os emissores de certificados configurados.

O tamanho da zona padrão é suficiente para armazenar aproximadamente 50 chaves ECDSA prime256v1 ou 35 chaves RSA 2048.

acme_certificate

Sintaxe: acme_certificate issuer [identifier ...] [key=alg[:size]]

Padrão: -

Contexto: server

Define um certificado com a lista de identifiers solicitados do emissor issuer.

A lista explícita de identificadores pode ser omitida. Nesse caso, os identificadores serão retirados da diretiva server_name no mesmo bloco server. Nem todos os valores aceitos em server_name são identificadores de certificado válidos: expressões regulares e curingas não são suportados.

O parâmetro key define o tipo de chave privada gerada. Algoritmos de chave suportados e tamanhos: ecdsa:256 (padrão), ecdsa:384, ecdsa:521, rsa:2048, rsa:3072, rsa:4096.

Variáveis Embutidas

O módulo ngx_http_acme_module suporta variáveis embutidas, válidas no bloco server com a diretiva acme_certificate:

$acme_certificate

Certificado SSL que pode ser passado para o ssl_certificate.

$acme_certificate_key

Chave privada do certificado SSL que pode ser passada para o ssl_certificate_key.

GitHub

Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-acme.