pqcstatus
Guia

Ativar o TLS pós-quântico no nginx, Apache, HAProxy e Caddy

As diretivas, os pré-requisitos e como verificar a mudança sem quebrar clientes mais antigos.

· 8 min

Ativar a troca de chaves pós-quântica híbrida costuma ser uma alteração de uma única linha, desde que a biblioteca TLS subjacente suporte o ML-KEM. Este guia cobre os quatro servidores mais comuns. Testamos a configuração do nginx abaixo com o OpenSSL 3.5 em nossos próprios testes de integração.

Passo 0: verificar a biblioteca TLS

Os grupos ML-KEM estão integrados ao OpenSSL 3.5 e posteriores. Verifique a versão que o seu servidor realmente usa, que pode ser diferente da ferramenta de linha de comando:

openssl version
nginx -V 2>&1 | grep -o 'OpenSSL [0-9.]*'
apachectl -V | grep -i openssl
haproxy -vv | grep -i openssl

Se a versão for anterior à 3.5, atualize os pacotes do sistema operacional ou use uma compilação vinculada a um OpenSSL recente. O Debian 13 (trixie), por exemplo, traz o OpenSSL 3.5. Sem isso, as diretivas abaixo vão falhar ou ser ignoradas.

nginx

No bloco server (ou no bloco http), permita o TLS 1.3 e coloque o grupo híbrido primeiro, seguido dos fallbacks clássicos:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519MLKEM768:X25519:prime256v1;

Apesar do nome, ssl_ecdh_curve define a lista de grupos de troca de chaves repassada ao OpenSSL. Recarregue com nginx -t && systemctl reload nginx.

Apache HTTP Server

Com o mod_ssl vinculado ao OpenSSL 3.5 ou posterior, passe a lista de grupos diretamente ao OpenSSL:

SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLOpenSSLConfCmd Groups X25519MLKEM768:X25519:prime256v1

Coloque as diretivas no virtual host ou na configuração SSL global, depois execute apachectl configtest e recarregue.

HAProxy

Na seção global, defina os grupos padrão para todas as linhas bind:

global
    ssl-default-bind-options ssl-min-ver TLSv1.2
    ssl-default-bind-curves X25519MLKEM768:X25519:P-256

Você também pode definir curves em uma linha bind específica. O HAProxy precisa ser compilado com o OpenSSL 3.5 ou posterior; verifique com haproxy -vv.

Caddy

O Caddy usa a pilha TLS do Go, que ativa o X25519MLKEM768 por padrão a partir do Go 1.24. Versões recentes do Caddy compiladas com Go 1.24 ou posterior, portanto, o negociam sem nenhuma configuração. Se o seu Caddyfile restringe as curvas em um bloco tls, adicione o grupo híbrido explicitamente:

tls {
    curves x25519mlkem768 x25519
}

Atrás de uma CDN ou de um balanceador de carga

Ative o grupo no componente que termina o TLS para os visitantes: a CDN, o balanceador de carga na nuvem ou o proxy reverso. Depois faça o mesmo na conexão desse componente com os seus servidores de origem, que é um link TLS separado e muitas vezes esquecido.

Mantenha um fallback

Mantenha sempre um grupo clássico, como o X25519, depois do híbrido. Clientes que não suportam o ML-KEM simplesmente negociam o X25519, então nada quebra. O ClientHello híbrido é cerca de um kilobyte maior; alguns middleboxes antigos já lidaram mal com handshakes grandes no passado, o que é mais um motivo para manter o fallback e monitorar erros após a mudança.

Verifique

openssl s_client -connect www.example.com:443 -servername www.example.com \
  -groups X25519MLKEM768 -brief </dev/null | grep 'Negotiated'

Você deve ver Negotiated TLS1.3 group: X25519MLKEM768. Você também pode usar o scanner da PQC Status, que verifica ainda as versões de TLS, as suítes de cifras e a cadeia de certificados. Registre a mudança e a data no seu inventário criptográfico.

Qual grupo escolher?

O X25519MLKEM768 é a escolha padrão: recomendado pela IANA e suportado por todos os principais navegadores. Se você segue as recomendações da ANSSI para sistemas sensíveis, que prefere o nível de segurança mais alto, adicione primeiro o SecP384r1MLKEM1024 para os clientes que o suportam. Grupos ML-KEM puros, sem componente clássico, não são recomendados pela ANSSI nem pelo BSI, que pedem ambos o modo híbrido.

Perguntas frequentes

Ativar o ML-KEM vai quebrar navegadores mais antigos?

Não, desde que um grupo clássico como o X25519 permaneça na lista. Clientes que não conhecem o grupo híbrido negociam o clássico, exatamente como antes.

Preciso de um novo certificado para ativar o TLS pós-quântico?

Não. A troca de chaves é independente do certificado. Seu certificado RSA ou ECDSA atual continua funcionando enquanto as chaves de sessão são protegidas pela troca híbrida.

Por que nada é negociado depois que alterei a configuração?

Na maioria das vezes, o servidor está vinculado a uma versão do OpenSSL anterior à 3.5, ou o TLS 1.3 está desativado, ou uma CDN termina o TLS antes do seu servidor. Verifique a versão da biblioteca e teste o servidor diretamente.

Devo ativar o ML-KEM puro, sem X25519?

Não para uso geral. A ANSSI e o BSI recomendam o modo híbrido, que mantém a segurança clássica caso uma falha seja encontrada no novo algoritmo.