pqcstatus
Guida

Abilitare TLS post-quantistico su nginx, Apache, HAProxy e Caddy

Le direttive, i prerequisiti e come verificare la modifica senza compromettere i client meno recenti.

· 8 min

Abilitare lo scambio di chiavi ibrido post-quantistico richiede di solito la modifica di una sola riga, a condizione che la libreria TLS sottostante supporti ML-KEM. Questa guida copre i quattro server più diffusi. Abbiamo testato la configurazione nginx riportata qui sotto con OpenSSL 3.5 nei nostri test di integrazione.

Passo 0: verifica la libreria TLS

I gruppi ML-KEM sono integrati in OpenSSL 3.5 e successivi. Verifica la versione effettivamente usata dal tuo server, che può essere diversa da quella dello strumento a riga di comando:

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

Se la versione è precedente alla 3.5, aggiorna i pacchetti del sistema operativo o usa una build collegata a un OpenSSL recente. Debian 13 (trixie), ad esempio, include OpenSSL 3.5. Senza di esso, le direttive seguenti falliranno o verranno ignorate.

nginx

Nel blocco server (o nel blocco http), consenti TLS 1.3 e metti per primo il gruppo ibrido, seguito dai fallback classici:

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

Nonostante il nome, ssl_ecdh_curve imposta l'elenco dei gruppi di scambio di chiavi passati a OpenSSL. Ricarica con nginx -t && systemctl reload nginx.

Apache HTTP Server

Con mod_ssl collegato a OpenSSL 3.5 o successivo, passa l'elenco dei gruppi direttamente a OpenSSL:

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

Inserisci le direttive nel virtual host o nella configurazione SSL globale, poi esegui apachectl configtest e ricarica.

HAProxy

Nella sezione global, imposta i gruppi predefiniti per tutte le righe bind:

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

Puoi anche impostare curves su una singola riga bind. HAProxy deve essere compilato con OpenSSL 3.5 o successivo; verifica con haproxy -vv.

Caddy

Caddy usa lo stack TLS di Go, che abilita X25519MLKEM768 per impostazione predefinita a partire da Go 1.24. Le release recenti di Caddy compilate con Go 1.24 o successivo lo negoziano quindi senza alcuna configurazione. Se il tuo Caddyfile limita le curve in un blocco tls, aggiungi esplicitamente il gruppo ibrido:

tls {
    curves x25519mlkem768 x25519
}

Dietro una CDN o un load balancer

Abilita il gruppo sul componente che termina il TLS per i visitatori: la CDN, il load balancer cloud o il reverse proxy. Poi fai lo stesso per la connessione da quel componente ai tuoi server di origine, che è un collegamento TLS distinto e spesso dimenticato.

Mantieni un fallback

Mantieni sempre un gruppo classico come X25519 dopo quello ibrido. I client che non supportano ML-KEM negoziano semplicemente X25519, quindi nulla si interrompe. Il ClientHello ibrido è più grande di circa un kilobyte; in passato alcuni vecchi middlebox hanno gestito male gli handshake di grandi dimensioni, un motivo in più per mantenere il fallback e monitorare gli errori dopo la modifica.

Verifica

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

Dovresti vedere Negotiated TLS1.3 group: X25519MLKEM768. Puoi anche usare lo scanner PQC Status, che verifica inoltre le versioni TLS, le suite di cifratura e la catena di certificati. Registra la modifica e la sua data nel tuo inventario crittografico.

Quale gruppo scegliere?

X25519MLKEM768 è la scelta predefinita: raccomandato dalla IANA e supportato da tutti i principali browser. Se segui le raccomandazioni dell'ANSSI per i sistemi sensibili, che preferiscono il livello di sicurezza più elevato, aggiungi per primo SecP384r1MLKEM1024 per i client che lo supportano. I gruppi ML-KEM puri, senza componente classica, non sono raccomandati né dall'ANSSI né dal BSI, che chiedono entrambi la modalità ibrida.

Domande frequenti

Abilitare ML-KEM crea problemi ai browser meno recenti?

No, purché nell'elenco resti un gruppo classico come X25519. I client che non conoscono il gruppo ibrido negoziano quello classico, esattamente come prima.

Serve un nuovo certificato per abilitare TLS post-quantistico?

No. Lo scambio di chiavi è indipendente dal certificato. Il tuo certificato RSA o ECDSA esistente continua a funzionare mentre le chiavi di sessione sono protette dallo scambio ibrido.

Perché non viene negoziato nulla dopo aver modificato la configurazione?

Nella maggior parte dei casi il server è collegato a una versione di OpenSSL precedente alla 3.5, oppure TLS 1.3 è disattivato, oppure una CDN termina il TLS prima del tuo server. Verifica la versione della libreria e testa direttamente il server.

Dovrei abilitare ML-KEM puro senza X25519?

Non per un uso generale. ANSSI e BSI raccomandano la modalità ibrida, che mantiene la sicurezza classica nel caso in cui venisse scoperta una falla nel nuovo algoritmo.