pqcstatus
Guía

Activar TLS poscuántico en nginx, Apache, HAProxy y Caddy

Las directivas, los requisitos previos y cómo verificar el cambio sin afectar a los clientes antiguos.

· 8 min

Activar el intercambio de claves poscuántico híbrido suele requerir un cambio de una sola línea, siempre que la biblioteca TLS subyacente admita ML-KEM. Esta guía abarca los cuatro servidores más habituales. Hemos probado la configuración de nginx que figura a continuación con OpenSSL 3.5 en nuestras propias pruebas de integración.

Paso 0: comprobar la biblioteca TLS

Los grupos ML-KEM están integrados en OpenSSL 3.5 y posteriores. Compruebe la versión que utiliza realmente su servidor, que puede ser distinta de la de la herramienta de línea de comandos:

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

Si la versión es anterior a la 3.5, actualice los paquetes del sistema operativo o utilice una compilación enlazada con un OpenSSL reciente. Debian 13 (trixie), por ejemplo, incluye OpenSSL 3.5. Sin ello, las directivas siguientes fallarán o se ignorarán.

nginx

En el bloque server (o en el bloque http), permita TLS 1.3 y coloque el grupo híbrido en primer lugar, seguido de las alternativas clásicas:

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

A pesar de su nombre, ssl_ecdh_curve define la lista de grupos de intercambio de claves que se pasa a OpenSSL. Recargue con nginx -t && systemctl reload nginx.

Apache HTTP Server

Con mod_ssl enlazado a OpenSSL 3.5 o posterior, pase la lista de grupos directamente a OpenSSL:

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

Coloque las directivas en el host virtual o en la configuración SSL global y, a continuación, ejecute apachectl configtest y recargue.

HAProxy

En la sección global, defina los grupos predeterminados para todas las líneas bind:

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

También puede definir curves en una línea bind concreta. HAProxy debe estar compilado con OpenSSL 3.5 o posterior; compruébelo con haproxy -vv.

Caddy

Caddy utiliza la pila TLS de Go, que activa X25519MLKEM768 por defecto a partir de Go 1.24. Por tanto, las versiones recientes de Caddy compiladas con Go 1.24 o posterior lo negocian sin ninguna configuración. Si su Caddyfile restringe las curvas en un bloque tls, añada explícitamente el grupo híbrido:

tls {
    curves x25519mlkem768 x25519
}

Detrás de una CDN o de un balanceador de carga

Active el grupo en el componente que termina el TLS de los visitantes: la CDN, el balanceador de carga en la nube o el proxy inverso. Después, haga lo mismo con la conexión entre ese componente y sus servidores de origen, que es un enlace TLS independiente y a menudo se olvida.

Mantener una alternativa

Mantenga siempre un grupo clásico, como X25519, después del híbrido. Los clientes que no admiten ML-KEM simplemente negocian X25519, por lo que nada deja de funcionar. El ClientHello híbrido es aproximadamente un kilobyte mayor; algunos equipos intermedios antiguos han gestionado mal negociaciones de gran tamaño en el pasado, lo que es otra razón para mantener la alternativa y supervisar los errores tras el cambio.

Verificar

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

Debería ver Negotiated TLS1.3 group: X25519MLKEM768. También puede usar el escáner de PQC Status, que además comprueba las versiones de TLS, los conjuntos de cifrado y la cadena de certificados. Registre el cambio y su fecha en su inventario criptográfico.

¿Qué grupo elegir?

X25519MLKEM768 es la opción predeterminada: recomendado por la IANA y compatible con todos los navegadores principales. Si sigue las recomendaciones de la ANSSI para sistemas sensibles, que prefieren el nivel de seguridad más alto, añada SecP384r1MLKEM1024 en primer lugar para los clientes que lo admitan. Los grupos ML-KEM puros, sin componente clásico, no están recomendados por la ANSSI ni por la BSI, que piden ambas el modo híbrido.

Preguntas frecuentes

¿Activar ML-KEM afectará a los navegadores antiguos?

No, siempre que un grupo clásico como X25519 siga en la lista. Los clientes que no conocen el grupo híbrido negocian el clásico, exactamente como antes.

¿Necesito un nuevo certificado para activar TLS poscuántico?

No. El intercambio de claves es independiente del certificado. Su certificado RSA o ECDSA actual sigue funcionando mientras las claves de sesión quedan protegidas por el intercambio híbrido.

¿Por qué no se negocia nada después de cambiar la configuración?

Lo más habitual es que el servidor esté enlazado con una versión de OpenSSL anterior a la 3.5, que TLS 1.3 esté desactivado o que una CDN termine el TLS antes de su servidor. Compruebe la versión de la biblioteca y pruebe el servidor directamente.

¿Debo activar ML-KEM puro sin X25519?

No para un uso general. La ANSSI y la BSI recomiendan el modo híbrido, que conserva la seguridad clásica si se descubriera un fallo en el nuevo algoritmo.