ACME#

Fornece recuperação automática de certificados usando o protocolo ACME.

Ao compilar a partir do código-fonte, o módulo não é compilado por padrão; ele deve ser habilitado com a opção de compilação --with-http_acme_module. Em pacotes e imagens de nossos repositórios, o módulo está incluído na compilação.

Exemplo de Configuração#

Neste exemplo, um cliente ACME chamado example obtém e renova automaticamente um certificado para example.com e www.example.com usando a validação HTTP padrão:

http {

    resolver 127.0.0.53; # Necessário para a diretiva 'acme_client'

    acme_client example https://acme-v02.api.letsencrypt.org/directory;

    server {

        listen 80; # Opcional se nenhum servidor escuta na porta de desafio HTTP
                   # (veja a diretiva 'acme_http_port')

        listen 443 ssl;

        server_name example.com www.example.com;
        acme example;

        ssl_certificate $acme_cert_example;
        ssl_certificate_key $acme_cert_key_example;
    }
}

Para outros métodos de validação (DNS, ALPN, baseada em hooks) e instruções de configuração detalhadas, consulte a seção Configuração ACME.

Diretivas#

acme#

Sintaxe

acme name;

Padrão

Contexto

server

Especifica o cliente ACME que obtém um certificado para os identificadores de certificado válidos neste bloco server. Um único certificado cobre todos os nomes de domínio válidos e endereços IP especificados nas diretivas server_name de todos os blocos server que referenciam o cliente com o name fornecido; se a configuração server_name mudar, o certificado é renovado para refletir as mudanças.

Cada vez que o Angie inicia, novos certificados são solicitados para todos os identificadores que não possuem um certificado válido. Possíveis razões incluem expiração do certificado, arquivos ausentes ou ilegíveis, e mudanças nas configurações do certificado.

Nota

Esta diretiva controla apenas quais identificadores de certificado válidos são incluídos nas solicitações de certificado; ela não afeta onde o certificado pode ser usado. Qualquer bloco server pode referenciar o certificado através da variável $acme_cert_<name>, independentemente de o bloco conter ou não uma diretiva acme. Remover acme de um bloco server simplesmente exclui os valores de server_name desse bloco das futuras solicitações de certificado, mas não impede que o bloco use o certificado.

Nota

Atualmente, domínios especificados com expressões regulares não são suportados e serão ignorados.

Domínios curinga são suportados apenas com challenge=dns em acme_client.

Endereços IPv4 e IPv6 são suportados a menos que o cliente use challenge=dns. Com a validação DNS habilitada, os endereços IP são ignorados.

Esta diretiva pode ser especificada múltiplas vezes para carregar certificados de diferentes tipos, por exemplo RSA e ECDSA:

server {

    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate $acme_cert_rsa;
    ssl_certificate_key $acme_cert_key_rsa;

    ssl_certificate $acme_cert_ecdsa;
    ssl_certificate_key $acme_cert_key_ecdsa;

    acme rsa;
    acme ecdsa;
}

acme_client#

Alterado na versão 1.11.0.

Alterado na versão 1.12.0.

Sintaxe

acme_client name uri [enabled=on | off] [key_type=type] [key_bits=number] [email=email] [max_cert_size=number] [max_key_auth_size=size] [renew_before_expiry=time] [renew_on_load] [retry_after_error=off|time] [challenge=dns | http | alpn] [profile=name] [account_key=file] [eab=id[:alg]:key];

Padrão

Contexto

http

Define um cliente ACME com um name globalmente único. Ele deve ser válido para um diretório, é uma string com variáveis, e será usado sem distinção entre maiúsculas e minúsculas.

Cada cliente gerencia um único certificado; para obter certificados separados, configure múltiplos blocos acme_client (consulte Certificados Separados para Domínios Diferentes).

Dica

O nome do cliente especificado aqui o identifica na configuração do Angie, permitindo que você combine as diretivas acme_client, acme, e variáveis do módulo que usam este nome; não o confunda com seu domínio ou nome do servidor.

O segundo parâmetro obrigatório é o uri do diretório ACME. Por exemplo, o URI do diretório ACME do Let's Encrypt é especificado como https://acme-v02.api.letsencrypt.org/directory.

Nota

O módulo ACME adiciona um location @acme nomeado ao contexto client, que pode ser usado para configurar solicitações ao diretório ACME; por padrão, este location contém uma diretiva proxy_pass com o uri do diretório, ao qual outras configurações do módulo Proxy podem ser adicionadas.

Para que esta diretiva funcione, um resolver deve ser configurado no mesmo contexto.

Nota

Para fins de teste, as autoridades certificadoras geralmente fornecem ambientes de teste separados. Por exemplo, o ambiente de teste do Let's Encrypt é https://acme-staging-v02.api.letsencrypt.org/directory.

enabled

Habilita ou desabilita a renovação de certificados para o cliente; isso é útil, por exemplo, para suspender temporariamente sem remover o cliente da configuração.

Padrão: on.

key_type

O tipo de algoritmo de chave privada para o certificado. Valores válidos: rsa, ecdsa.

Padrão: ecdsa.

key_bits

Número de bits na chave do certificado. Padrão: 256 para ecdsa, 2048 para rsa.

email

Endereço de email opcional para feedback; usado ao criar uma conta no servidor da CA.

max_cert_size

Especifica o tamanho máximo permitido de um novo arquivo de certificado em bytes para reservar espaço para o novo certificado na memória compartilhada; quanto mais domínios o certificado for solicitado, mais espaço será necessário. Este parâmetro não limita o tamanho das respostas do servidor ACME; use acme_max_response_size para isso.

Se o parâmetro não for definido, o Angie calcula um tamanho aproximado com base na lista de domínios configurada e o usa para alocação de memória compartilhada.

Se um certificado já existir na inicialização mas seu tamanho exceder o valor max_cert_size, o valor max_cert_size é aumentado dinamicamente para corresponder ao tamanho do arquivo de certificado existente.

Se o tamanho de um certificado obtido durante a renovação exceder max_cert_size, o processo de renovação falhará com um erro.

Padrão: calculado automaticamente.

max_key_auth_size

Limita o tamanho da string de autorização de chave que o Angie armazena na memória compartilhada para um desafio ACME. Se o servidor ACME retornar uma string de autorização de chave maior que este valor, a solicitação falhará com um erro que recomenda aumentar max_key_auth_size.

Embora especificado na linha acme_client, esta é uma configuração única compartilhada por todos os clientes no bloco http.

Padrão: 2k.

renew_before_expiry

Tempo antes da expiração do certificado quando a renovação deve começar.

Padrão: 30d.

renew_on_load

Especifica que o certificado deve ser renovado forçadamente cada vez que a configuração for carregada.

retry_after_error

Tempo para aguardar antes de tentar novamente se a recuperação do certificado falhar. Se definido como off, o cliente não tentará obter o certificado novamente após um erro.

Padrão: 2h.

challenge

Especifica o tipo de verificação para o cliente ACME. Valores válidos: dns, http, alpn.

O valor alpn habilita a validação TLS-ALPN-01 e requer que o Angie seja compilado com OpenSSL que suporte ALPN (não suportado com compilações BoringSSL ou AWS-LC).

Padrão: http.

profile

Solicita um perfil ACME específico da autoridade certificadora. Um perfil é uma variante, definida pela CA, das configurações de certificado e validação, por exemplo o tempo de vida do certificado ou quais tipos de identificadores podem ser solicitados.

Por exemplo, a Let's Encrypt descreve seus perfis disponíveis na documentação de perfis.

O servidor ACME deve anunciar esse perfil nos metadados de seu diretório; caso contrário, o cliente não conseguirá obter um certificado.

account_key

Especifica o caminho completo para um arquivo contendo uma chave em formato PEM. Isso é útil se você quiser usar uma chave de conta existente em vez de geração automática, ou se precisar usar uma chave para múltiplos clientes ACME.

Tipos de chave suportados:

  • Chaves RSA com comprimentos que são múltiplos de 8, variando de 2048 a 8192 bits.

  • Chaves ECDSA com comprimentos de 256, 384 ou 521 bits.

Ao especificar o parâmetro account_key, certifique-se de que o arquivo de chave realmente existe. Se o arquivo estiver ausente, o Angie tentará criá-lo no caminho especificado.

Note que as chaves para clientes ACME são criadas na ordem em que os clientes correspondentes são mencionados na configuração nas diretivas acme_client, acme ou acme_hook. Portanto, se um cliente deve usar uma chave criada para outro, esse outro cliente deve aparecer antes na configuração.

Além disso, as chaves são criadas apenas para clientes que têm o parâmetro enabled=on definido.

eab

Configura o External Account Binding (EAB), vinculando a conta ACME a uma conta já registrada na autoridade certificadora (CA).

O valor tem a forma eab=id[:alg]:key:

  • id — o identificador de chave emitido pela CA.

  • alg — o algoritmo de assinatura HMAC usado para calcular a assinatura de vinculação: HS256 (padrão), HS384 ou HS512.

  • key — a chave MAC codificada em Base64URL associada ao id no lado da CA.

Se a CA exigir External Account Binding mas o parâmetro não estiver definido, o cliente informa um erro sem criar uma conta ACME. As credenciais EAB só são enviadas quando uma nova conta ACME é registrada; uma conta ACME existente é reutilizada como está.

acme_client_path#

Sintaxe

acme_client_path path;

Padrão

Contexto

http

Substitui o path para o diretório de armazenamento de certificados e chaves, definido durante a compilação usando o parâmetro de compilação --http-acme-client-path.

acme_dns_port#

Sintaxe

acme_dns_port port | ip[:port] | [ip6][:port];

Padrão

acme_dns_port 53;

Contexto

http

Especifica a porta que o módulo usa para lidar com consultas DNS do servidor ACME sobre UDP. O número da porta deve estar no intervalo de 1 a 65535.

Especificar um endereço IP junto com uma porta opcional também é suportado. Tanto endereços IPv4 na forma ip:port quanto endereços IPv6 na forma [ip6]:port podem ser usados:

acme_dns_port 8053;
acme_dns_port 127.0.0.1;
acme_dns_port [::1];

Para usar o número de porta 1024 ou inferior, o processo mestre do Angie deve executar com privilégios de superusuário.

acme_dns_ttl#

Adicionado na versão 1.12.0.

Sintaxe

acme_dns_ttl number;

Padrão

acme_dns_ttl 1;

Contexto

http

Define o TTL, em segundos, dos registros TXT que o módulo retorna nas respostas às consultas de validação DNS dos servidores ACME. Aceita valores de 0 a 2147483647, conforme a RFC 2181.

acme_hook#

Sintaxe

acme_hook name [uri];

Padrão

Contexto

location

Habilita a validação de domínio baseada em hooks para o cliente ACME especificado por name. Quando a emissão ou renovação de certificado requer verificação de domínio, o Angie gera uma solicitação interna para o location nomeado onde esta diretiva está colocada. Como a solicitação é tratada depende inteiramente das outras diretivas configuradas no mesmo location, como fastcgi_pass, proxy_pass, ou qualquer outro manipulador de solicitações.

name

O nome do cliente ACME para o qual este hook trata a verificação de domínio.

uri

Uma string com variáveis; especifica a URI de solicitação para chamadas de hook.

Padrão: /.

Por exemplo, a seguinte configuração passa os valores das variáveis de hook para uma aplicação FastCGI através da URI de solicitação:

acme_hook example uri=/acme_hook/$acme_hook_name?domain=$acme_hook_domain&key=$acme_hook_keyauth;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_pass ...;

acme_http_port#

Adicionado na versão 1.11.0.

Alterado na versão 1.11.1.

Sintaxe

acme_http_port port | ip[:port] | [ip6][:port];

Padrão

acme_http_port 80;

Contexto

http

Especifica a porta que o módulo usa para lidar com solicitações de desafio ACME HTTP. O número da porta deve estar no intervalo de 1 a 65535.

Especificar um endereço IP junto com uma porta opcional também é suportado. Tanto endereços IPv4 na forma ip:port quanto endereços IPv6 na forma [ip6]:port podem ser usados:

acme_http_port 8080;
acme_http_port 127.0.0.1;
acme_http_port [::1];

Se nenhum servidor estiver configurado para escutar no endereço e porta especificados, o módulo cria um listener dedicado para desafios HTTP.

Para usar o número de porta 1024 ou inferior, o processo mestre do Angie deve executar com privilégios de superusuário.

acme_max_response_size#

Adicionado na versão 1.11.0.

Sintaxe

acme_max_response_size size;

Padrão

acme_max_response_size 32k;

Contexto

http

Limita o tamanho máximo do corpo de uma resposta do servidor ACME. Se uma resposta exceder este limite, a solicitação falhará com um erro. Aumente o valor se você ver erros como too big subrequest response while sending to client.

Variáveis Integradas#

$acme_cert_<name>#

Conteúdo do último arquivo de certificado (se houver) obtido pelo cliente com este name.

$acme_cert_key_<name>#

Conteúdo do arquivo de chave do certificado usado pelo cliente com este name.

Nota

O arquivo de certificado está disponível apenas se o cliente ACME tiver obtido pelo menos um certificado, mas o arquivo de chave está disponível imediatamente após a inicialização.

$acme_hook_challenge#

O tipo de desafio. Valores possíveis: dns, http, alpn.

$acme_hook_client#

O nome do cliente ACME que inicia a solicitação.

$acme_hook_domain#

O domínio sendo verificado. Se for um domínio curinga, será passado sem o prefixo *..

$acme_hook_keyauth#

A string de autorização:

  • Para desafio DNS, é usada como o valor do registro TXT, cujo nome é formado como _acme-challenge. + $acme_hook_domain + ..

  • Para desafio HTTP, esta string deve ser usada como o conteúdo da resposta solicitada pelo servidor ACME.

$acme_hook_name#

O nome do hook. Para diferentes tipos de desafio, pode ter diferentes valores e significados:

Valor

Significado para desafio DNS

Significado para desafio HTTP

add (hook de adição)

O registro TXT correspondente deve ser adicionado à configuração DNS.

Uma resposta à solicitação HTTP correspondente deve ser preparada.

remove (hook de remoção)

O registro TXT pode ser removido da configuração DNS.

Esta solicitação HTTP não é mais relevante; o arquivo criado anteriormente com a string de autorização pode ser removido.

$acme_hook_token#

O token de verificação. Para desafio HTTP, é usado como o nome do arquivo solicitado: /.well-known/acme-challenge/ + $acme_hook_token.