标签: PQC 网络安全 TLS
2026 年的合规时间窗已经不再"宽松"。
国际时间表
国内时间表(比国际节奏晚 1-2 年)
采用曲线告诉我们这是一场长尾战:Cloudflare 前端流量 59% 已完成 PQC(一年前 38%),但后端仅 11% [来源:每日资讯-2026-09-04 §五,经济学人 09-01]。客户端快、服务端慢——这意味着"等标准成熟了再做"已经来不及,工程债越往后越重。
量子端的威胁在收紧:Pinnacle 架构预印本(2026-02)把 RSA-2048 的物理比特需求估算降到 <10 万;Caltech/Oratomic 称~1 万物理比特可破 ECC-256 [来源:每日资讯-2026-09-04 §6.2,媒体转述、未经实机验证]——harvest-now-decrypt-later 的实际窗口比 2018 年的乐观估计短了不止一个数量级。
架构——fibemate 的服务端是 Node.js(pm2 跑在 3001 端口),Nginx 在反代与 TLS 终结层承担,WebSocket 端点是 wss://fibemate.net/ws [来源:每日资讯-2026-09-04 §一]。所以这次"把 HTTPS 升级到混合 PQ"——改造的真正落点是 Nginx,Node.js 业务层只调上游的握手记录,不需要动应用代码。
算法:X25519 + ML-KEM-768 混合——行业默认(Signal PQXDH / Cloudflare / Ekko 浏览器扩展沿用此组合)。备选路径与放弃理由:
证书:保持经典 X.509 链,不动 PQC 证书链——生态太早,等国密 PQC 标准 2027 底再试。
回退:算法协商顺序 先混合 → 再纯经典 → 再终止——缺这一步就会出现 §4 的"幽灵客户端"问题。
从第一次部署到稳定运行,通常需要多轮迭代。教程里"配完就能用"的版本和生产环境之间,每个问题都让我们重写了不止一次。
本节口径:延迟具体数字不在本文给出(避免单点 latency 引用造成的偏差),对比数据留给独立的 3.A 那篇基准文。这里只讲"现象 — 排查 — 教训"的复盘逻辑。
上线混合握手开关后,SLO 报警面板里 p99 握手时间那一栏开始零星踩线——不是立刻爆,是长时间累计超时触发阈值。
最容易被忽视的一点:现象只在部分客户端出现。这意味着它不是机器性能瓶颈,是个有条件的退化路径。
最常见的三个定位方向:
不同部署环境表现差异显著——是其中一个、两个叠加、还是另有原因,需根据实际生产场景做端到端 profiling 后定位,不要在没采样之前猜结论。
延迟模型不能从论文直接抄。要在自己的目标机型上做带 RTT 的端到端采样,最少 1000 次取中位数 + p95 + p99。具体数字留给 3.A 那篇独立基准——本文不复述。
本节口径:fibemate 当前仍保持经典 X.509,本节讨论的是一旦切换到 PQC 证书链、或在经典链上"挂"一个 PQC 中间证书时会撞到的兼容性问题;下面的 openssl 实测是当前链结构(作为对比基线)。
部分老客户端(特别是企业内网的 IE11 / 旧版 curl / 老 Android Trust Store)报"无法验证颁发者"。
先用 openssl s_client 看当前 fibemate.net 的真实链:
链结构实测:3 层 operational(leaf + Let's Encrypt YE2 中间 + ISRG Root YE 根),外加 depth=3 = ISRG Root X2 这一层是legacy 交叉签名根,只为兼容老 trust store 的客户端额外保留。 进入 PQC 试点时,整条链要么换成 PQC、要么在经典链上"挂"一个 PQC 中间证书——后者才是不踩坑的关键设计。
排查路径:
小贴士:常用
grep "s:" | wc -l这种命令计数证书数,但 openssl s_client 的证书 subject 行前缀是 subject=(不是 s:)。用grep "subject=" | wc -l才是对的。
混合证书链部署时,PQC 中间证书由新 CA 签发,老客户端的 trust store 没同步。depth=3 的 legacy 交叉签名根正好是这种兼容场景的反例参考——它存在就是为了不让老 trust store 断链,PQC 链可以考虑类似做法。
我们的取舍:双链并行——经典链继续,老客户端断网成本远高于服务器多挂一个证书的运维成本。如果客户端清单里老客户端占比非常低(<1%),也可以考虑直接断老客户端,但要先盘完依赖方再决策。
具体的客户端 trust store 推送机制(示意,不限定实现):
证书链不是部署侧单方面的事。升级前先盘目标客户端清单,老客户端的命运要在升级前定好。深度经验——参考现行的 depth=3 legacy 交叉签名根这种"为老客户端多挂一层"的妥协方案,PQC 链可以借鉴。
监控显示大量连接在 last byte 阶段超时回退,抓包看到某些客户端发了 5+ 次 ClientHello 才完成握手。
ssl_prefer_server_ciphers 的算法顺序决定了协商结果。我们最初按 RFC 草案把 ML-KEM 系列排第一,结果部分客户端把 ML-KEM-768 排在 X25519 后面,协商失败。
把协商顺序倒过来——客户端优先,服务器兜底:
算法协商不是"按 RFC 顺序排"就完事。每个客户端实现都有自己的优先列表,部署前要在 5+ 种客户端上实测。
上线一周后被问"现在握手到底有多少走的是混合 PQ 路径",可观测性设计缺失导致无法作答。
升级前只盯了功能正确性,没设计升级后的可观测性。
加了三个核心面板:
可观测性设计要在升级前做完,否则就是黑盒升级——出问题都不知道是不是 PQ 的锅。
内部定的"6 个月内全量切换到混合 PQ" deadline,第 4 个月时还卡在 60%。
把 PQC 升级当"技术项目"做,没当"治理项目"做。三个层面的协调成本被低估:
PQC 升级是 18–24 个月的工程,不是季度项目。Plan 里要有:盘资产 → 设门槛 → 灰度 → 强制切换,每个阶段单独 review。
国内侧的两条额外信号:
回看这 5 个问题,四个反复出现的模式:
本节定位:代码为通用参考结构,用于读者理解 PQC 控制平面的设计要点(算法协商、共享内存、日志格式、抓包核对)。具体配置以你团队的目标环境为准;不同 Nginx 版本对 ssl_conf_command 的支持语法差异显著,按你目标版本号调整。
参考代码位置:fibemate 的 PQC 控制平面代码在主仓 packages/pqc-kem/src/ml-kem-768.js(参考,不作为本文必读),配套类型与 KAT 数据见同一目录。
本文所有数据来源、部署事实、证书链实测均出自 fibemate 官方每日巡检报告与公开证书验证(详见文中 [来源:每日资讯-xxx] 与 §3.2 实测命令)。
术语 | 含义 |
|---|---|
PQC | Post-Quantum Cryptography,后量子密码学 |
ML-KEM | Module-Lattice-based Key-Encapsulation Mechanism(NIST FIPS 203,前身 Kyber) |
ML-DSA | Module-Lattice-based Digital Signature Algorithm(NIST FIPS 204,前身 Dilithium) |
HNDL | Harvest Now Decrypt Later,现在采、以后解的长期窃听策略 |
双链并行 | 同时运行经典证书链与 PQC 证书链,老客户端走前者、新客户端走后者 |
交叉签名根 | 同一根证书用多个父 CA 的密钥都签一次,让不同 trust store 都能锚定 |
— 全文完 —
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。