PQC TLS & Protocol Configuration
How to deploy post-quantum cryptography in TLS, SSH, and VPN today — with working configurations for Nginx, Apache, OpenSSH, and StrongSwan.
Current PQC Support Status (2024–2025)
| Product / Platform | PQC Support | Algorithm | Status | Action |
|---|---|---|---|---|
| Chrome 116+ | TLS key exchange | X25519Kyber768 | Enabled by default | No action needed — PQC hybrid active for all HTTPS connections |
| Firefox 119+ | TLS key exchange | X25519Kyber768 | Enabled by default | No action needed |
| Safari / Apple | TLS key exchange | ML-KEM-768 (updated from Kyber) | Enabled in Safari 17+ | No action needed |
| Cloudflare CDN | TLS key exchange + TLS termination | X25519Kyber768 | Enabled by default for all zones | No action — Cloudflare handles it. Verify in CF analytics. |
| AWS Application Load Balancer | TLS key exchange | TLS_AES_128_GCM_SHA256 with PQC | Available — must enable TLS 1.3 PQC cipher policy | Set TLSv1.3 security policy in ALB listener |
| AWS CloudFront | TLS key exchange | X25519Kyber768 | Available via TLSv1.3_2021 policy | Update CloudFront distribution TLS policy |
| Google Cloud Load Balancer | TLS key exchange | X25519Kyber768 | Available in TLS 1.3 mode | Enable TLS 1.3 on GCP HTTPS load balancer |
| Nginx (OpenSSL 3.2+ / OQS build) | TLS key exchange | X25519Kyber768 and others | Available with OQS provider build | See Nginx tab — requires OQS OpenSSL build |
| Apache httpd (OQS build) | TLS key exchange | X25519Kyber768 | Available with mod_ssl + OQS build | See Apache tab — requires OQS OpenSSL |
| OpenSSH 9.0+ | SSH key exchange | sntrup761x25519-sha512 | Available, not default in all distros | Add KexAlgorithms line to sshd_config — see SSH tab |
| StrongSwan 5.9.6+ | IKEv2 VPN | Kyber (CRYSTALS) | Available as plugin | Install strongswan-plugin-oqs — see VPN tab |
| WireGuard | Key exchange | Curve25519 (not yet PQC) | No mainline PQC support yet | Monitor WireGuard PQ fork — not production ready |
| OpenVPN | TLS/key exchange | Depends on OpenSSL version | Partial — depends on OpenSSL OQS build | Complex — wait for mainline OpenSSL PQC support |
| Microsoft IIS / Schannel | TLS | Planned in Windows Server update | Not yet available | Monitor Windows PQC roadmap — expected 2025 |
| Node.js (via OpenSSL) | TLS | X25519Kyber768 (OpenSSL 3.2+) | Available when using Node 21+ with OQS OpenSSL | Update to Node 21+ and OQS OpenSSL build |
Nginx — PQC TLS Configuration
Option A: Cloudflare-terminated TLS (easiest — no server-side changes)
If you use Cloudflare in front of your Nginx, PQC hybrid is already active between clients and Cloudflare. The Cloudflare→Nginx connection uses classical TLS internally. This is the fastest way to give users PQC protection.
Option B: Direct Nginx with OQS-OpenSSL (native PQC)
Requires building Nginx with the OQS (Open Quantum Safe) provider for OpenSSL. This gives native PQC on the server without a CDN.
Nginx TLS configuration with PQC groups
Verify PQC is active
OpenSSH — PQC Key Exchange Configuration
OpenSSH 9.0+ supports hybrid PQC key exchange via sntrup761x25519-sha512 (streamlined NTRU + X25519). This is available in Ubuntu 22.04+, Debian 12+, RHEL 9+, and macOS 14+.
Server configuration (/etc/ssh/sshd_config)
Client configuration (~/.ssh/config)
VPN — PQC IKEv2 Configuration (StrongSwan)
StrongSwan 5.9.6+ supports PQC key exchange in IKEv2 via the oqs-plugins. This provides quantum-safe key exchange for IPSec VPN tunnels.
Testing & Verification Tools
| Tool | What It Checks | Command / URL |
|---|---|---|
| Cloudflare PQ Checker | Whether your browser negotiated PQC key exchange with Cloudflare | https://pq.cloudflareresearch.com |
| OpenSSL s_client | Negotiate specific PQC groups and verify | openssl s_client -connect host:443 -groups X25519MLKEM768 |
| Wireshark / tshark | Capture TLS handshake and inspect ClientHello supported_groups extension | tshark -i eth0 -f "tcp port 443" -Y "tls.handshake.type==1" |
| nmap ssl-enum-ciphers | Enumerate supported TLS cipher suites and key exchange groups | nmap --script ssl-enum-ciphers -p 443 host |
| testssl.sh | Comprehensive TLS configuration analysis including PQC group support | testssl.sh --pqc https://yourhost.com |
| OpenSSL version check | Verify OpenSSL supports PQC groups | openssl list -kem-algorithms | grep -i mlkem |
| SSH verbose connection | Verify PQC KEX algorithm negotiated | ssh -vvv user@host 2>&1 | grep "kex: " |