pqcstatus
Guide

Activer le TLS post-quantique sur nginx, Apache, HAProxy et Caddy

Les directives, les prérequis et la méthode pour vérifier la modification sans pénaliser les clients plus anciens.

· 8 min

Activer l'échange de clés post-quantique hybride tient généralement en une ligne, à condition que la bibliothèque TLS sous-jacente prenne en charge ML-KEM. Ce guide couvre les quatre serveurs les plus courants. Nous avons testé la configuration nginx ci-dessous avec OpenSSL 3.5 dans nos propres tests d'intégration.

Étape 0 : vérifier la bibliothèque TLS

Les groupes ML-KEM sont intégrés à OpenSSL 3.5 et versions ultérieures. Vérifiez la version réellement utilisée par votre serveur, qui peut différer de celle de l'outil en ligne de commande :

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

Si la version est antérieure à 3.5, mettez à jour les paquets du système d'exploitation ou utilisez une compilation liée à un OpenSSL récent. Debian 13 (trixie), par exemple, fournit OpenSSL 3.5. Sans cela, les directives ci-dessous échoueront ou seront ignorées.

nginx

Dans le bloc server (ou le bloc http), autorisez TLS 1.3 et placez le groupe hybride en premier, suivi des groupes classiques de repli :

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

Malgré son nom, ssl_ecdh_curve définit la liste des groupes d'échange de clés transmise à OpenSSL. Rechargez avec nginx -t && systemctl reload nginx.

Apache HTTP Server

Avec mod_ssl lié à OpenSSL 3.5 ou ultérieur, transmettez directement la liste des groupes à OpenSSL :

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

Placez les directives dans l'hôte virtuel ou dans la configuration SSL globale, puis exécutez apachectl configtest et rechargez.

HAProxy

Dans la section global, définissez les groupes par défaut pour toutes les lignes bind :

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

Vous pouvez aussi définir curves sur une ligne bind individuelle. HAProxy doit être compilé avec OpenSSL 3.5 ou ultérieur ; vérifiez avec haproxy -vv.

Caddy

Caddy utilise la pile TLS de Go, qui active X25519MLKEM768 par défaut à partir de Go 1.24. Les versions récentes de Caddy compilées avec Go 1.24 ou ultérieur le négocient donc sans aucune configuration. Si votre Caddyfile restreint les courbes dans un bloc tls, ajoutez explicitement le groupe hybride :

tls {
    curves x25519mlkem768 x25519
}

Derrière un CDN ou un répartiteur de charge

Activez le groupe sur le composant qui termine TLS pour les visiteurs : le CDN, le répartiteur de charge cloud ou le proxy inverse. Faites ensuite de même pour la connexion entre ce composant et vos serveurs d'origine, un lien TLS distinct souvent oublié.

Conserver une solution de repli

Conservez toujours un groupe classique comme X25519 après le groupe hybride. Les clients qui ne prennent pas en charge ML-KEM négocient simplement X25519 : rien ne casse. Le ClientHello hybride est plus volumineux d'environ un kilo-octet ; par le passé, quelques anciens équipements intermédiaires ont mal géré les négociations volumineuses, raison de plus pour conserver le repli et surveiller les erreurs après la modification.

Vérifier

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

Vous devriez voir Negotiated TLS1.3 group: X25519MLKEM768. Vous pouvez aussi lancer le scanner PQC Status, qui vérifie en plus les versions TLS, les suites cryptographiques et la chaîne de certificats. Consignez la modification et sa date dans votre inventaire cryptographique.

Quel groupe choisir ?

X25519MLKEM768 est le choix par défaut : recommandé par l'IANA et pris en charge par tous les grands navigateurs. Si vous suivez les recommandations de l'ANSSI pour les systèmes sensibles, qui privilégient le niveau de sécurité le plus élevé, ajoutez SecP384r1MLKEM1024 en premier pour les clients qui le prennent en charge. Les groupes ML-KEM purs, sans composante classique, ne sont recommandés ni par l'ANSSI ni par le BSI, qui demandent tous deux le mode hybride.

Questions fréquentes

Activer ML-KEM risque-t-il de bloquer les anciens navigateurs ?

Non, tant qu'un groupe classique comme X25519 reste dans la liste. Les clients qui ne connaissent pas le groupe hybride négocient le groupe classique, exactement comme auparavant.

Faut-il un nouveau certificat pour activer le TLS post-quantique ?

Non. L'échange de clés est indépendant du certificat. Votre certificat RSA ou ECDSA existant continue de fonctionner, tandis que les clés de session sont protégées par l'échange hybride.

Pourquoi rien n'est-il négocié après la modification de la configuration ?

Le plus souvent, le serveur est lié à une version d'OpenSSL antérieure à 3.5, TLS 1.3 est désactivé, ou un CDN termine TLS avant votre serveur. Vérifiez la version de la bibliothèque et testez directement le serveur.

Faut-il activer ML-KEM pur, sans X25519 ?

Pas pour un usage général. L'ANSSI et le BSI recommandent le mode hybride, qui préserve la sécurité classique si une faille était découverte dans le nouvel algorithme.