Overview
OpenSSL 3.5 integrates a number of algorithms resistant to attack by future quantum computers, commonly referred as Post-Quantum Cryptography (PQC). These include:
- key exchange algorithms
- TLS handshake signing algorithms
- public-key certificate algorithms
Possibility of storing the vast amounts of TLS encrypted traffic now and decrypting it later once the quantum computers become capable enough is considered a real problem, so the governments and standards bodies mandate transitioning to quantum-safe encryption.
Starting with MySQL 26.7.0, MySQL can use the PQC-capable TLS algorithms provided by OpenSSL 3.5 and later. The initial support focuses on TLSv1.3 connections: PQC-capable key exchange, optional PQC-capable TLS handshake signature advertisement, and observability for negotiated TLS algorithms.
Scope
When MySQL is built with OpenSSL 3.5 or later, TLSv1.3 connections can prefer PQC-capable key exchange groups while keeping classical fallback enabled by default. This lets newer clients negotiate PQC-capable key exchange without breaking the older clients.
The feature applies to these TLS channels:
- Main client-server connections
- Admin connections
- Asynchronous replication
- Group Replication recovery
- Group Replication inter-group channels (MySQL-stack only)
- X Plugin connections
The Group Replication XCom stack is not covered.
PQC-capable TLS handshake signature algorithms are supported as an opt-in feature. Enabling them controls what MySQL advertises or allows during the TLS handshake; it does not generate PQC certificates or require PQC certificates on disk.
Configuration
MySQL exposes three setting families for each supported channel:
| Setting family | Purpose | Default |
|---|---|---|
force_pqc | Reject new TLS sessions that do not negotiate a PQC-capable key exchange group. | OFF |
use_pqc_sign | Advertise PQC-capable TLS handshake signature algorithms before classical fallback algorithms. | OFF |
tls_kex | Configure an exact colon-separated allow list of TLS key exchange groups. | Empty, meaning MySQL default order |
Each channel has its own matching variables and command-line options, such as:
force_pqc,admin_force_pqc,replication_force_pqc,group_replication_force_pqc,mysqlx_force_pqcuse_pqc_sign,admin_use_pqc_sign,replication_use_pqc_sign,group_replication_use_pqc_sign,mysqlx_use_pqc_signtls_kex,admin_tls_kex,replication_tls_kex,group_replication_tls_kex,mysqlx_tls_kex
Client programs also support --force-pqc, --use-pqc-sign, and --tls-kex.
The corresponding C API options are MYSQL_OPT_FORCE_PQC, MYSQL_OPT_USE_PQC_SIGN, and MYSQL_OPT_TLS_KEX.
Supported Key Exchange Groups
The default preference order favors hybrid PQC groups first, then pure ML-KEM
groups, then classical fallback groups:
| Algorithm | Type |
|---|---|
X25519MLKEM768 | Hybrid PQC, X25519 plus ML-KEM-768 |
secp384r1MLKEM1024 | Hybrid PQC, P-384 plus ML-KEM-1024 |
secp256r1MLKEM768 | Hybrid PQC, P-256 plus ML-KEM-768 |
MLKEM512 | Pure ML-KEM-512 |
MLKEM768 | Pure ML-KEM-768 |
X25519 | Classical fallback |
secp384r1 | Classical fallback |
secp256r1 | Classical fallback |
secp521r1 | Classical fallback |
Names are case-sensitive. MySQL accepts only the documented names in tls_kex
allow lists.
Example:
[mysqld]
tls_kex=X25519MLKEM768:secp384r1MLKEM1024:X25519
To require PQC-capable key exchange on the main client channel:
[mysqld]
tls_version=TLSv1.3
force_pqc=ON
Enable strict PQC only after testing every required client and server. Older clients, TLSv1.2-only peers, and peers using TLS libraries without the required PQC groups will not be able to connect to a strict PQC channel.
PQC Handshake Signatures
Use following configuration to allow MySQL to advertise PQC-capable TLS handshake signature algorithms:
[mysqld]
use_pqc_sign=ON
When enabled, MySQL can advertise ML-DSA-44, ML-DSA-65, and ML-DSA-87 before classical fallback algorithms. The final negotiated signature algorithm still depends on the peer, TLS library, provider configuration, and available certificates.
Observability
MySQL adds session status variables for inspecting negotiated TLS algorithms:
SHOW SESSION STATUS LIKE 'Tls_key_exchange_algorithm';
SHOW SESSION STATUS LIKE 'Tls_sign_algorithm';
The existing cipher status remains available:
SHOW SESSION STATUS LIKE 'Ssl_cipher';
For the main and admin channels, performance_schema.tls_channel_status includes the current PQC-related channel settings:
Force_pqcUse_pqc_signTls_kex
For X Plugin, use the effective status variables:
SHOW GLOBAL STATUS LIKE 'Mysqlx_force_pqc';
SHOW GLOBAL STATUS LIKE 'Mysqlx_tls_kex';
SHOW GLOBAL STATUS LIKE 'Mysqlx_use_pqc_sign';
Negotiated algorithm values can be empty when the connection is not using TLS, the TLS session was resumed, or the linked TLS library does not expose the required information.
Deployment Guidance
For most deployments, start with the default behavior: allow MySQL to prefer PQC-capable key exchange while keeping classical fallback available.
Use stricter settings in stages:
- Confirm that MySQL is linked with OpenSSL 3.5 or later.
- Confirm that the relevant channels allow TLSv1.3.
- Leave
force_pqcOFF while testing compatibility. - Inspect negotiated algorithms with the new status variables.
- Enable
use_pqc_signonly after evaluating provider, certificate, and performance implications. - Enable
force_pqconly for channels where every required peer can negotiate PQC-capable TLSv1.3 key exchange.
For full option descriptions, channel-specific behavior, and troubleshooting details, see the MySQL documentation.
Conclusion
MySQL’s PQC TLS support gives administrators a practical migration path: prefer quantum-safe key exchange by default, keep compatibility where needed, and enable strict PQC policies when an environment is ready.
Thank you for using MySQL!
