PKI 体系结构与证书信任链
PKI 体系结构与证书信任链
日常上网时,浏览器地址栏的小锁、HTTPS、代码签名、邮件加密……背后都依赖同一套机制:公钥基础设施(PKI, Public Key Infrastructure)。
本人曾多年就职于CA行业,此文不仅是个人的总结,也算是小白科普文。本文先粗略梳理 PKI 的基本结构,以及证书如何把「不认识的对方」变成「可验证的信任」。
核心问题:如何信任一把公钥?
非对称加密本身只解决「谁有私钥谁能解密/签名」,并不回答:这把公钥到底属于谁?
如果攻击者用自己的密钥对冒充目标,你拿到的公钥再「正确」也没用。PKI 要解决的,就是在开放网络里建立对公钥归属的信任。
PKI 的基本角色
一个典型的 PKI 可以看成一套「发证—用证—验真」的协作体系。下面按角色拆开看。
CA(证书颁发机构)
CA 是整套体系的信任核心:审核申请方身份后,用自己的私钥对证书内容签名,从而声明「这份公钥属于某某主体」。
实务上 CA 通常分层:
- 根 CA(Root CA):私钥离线保管,极少直接签发终端证书;其证书被预置进操作系统 / 浏览器的 Root Store,是信任的起点。
- 中间 CA(Intermediate CA):由根(或上级中间)签发,日常负责签发服务器证、客户端证等。根私钥一旦泄露影响面极大,所以用中间层把风险隔离开。
你之所以信某个网站,本质上是因为你信本地 Root Store 里那批根,以及它们签发下来的整条链。
RA(注册机构)
RA 不是必须独立存在的组件,但在规模化 CA 里很常见。它负责证书申请入口、身份核验、资料收集,再把「已通过审核」的请求交给 CA 签发。
可以把它理解成 CA 的「前台 + 审核岗」:CA 专注密钥与签发,RA 专注业务受理。小规模或私有 CA 里,这两步往往合在同一个系统里完成。
证书持有者(Subscriber)
持有者生成(或由 HSM 等托管)密钥对,把公钥交给 CA/RA 申请证书;证书签发后,私钥始终留在持有者侧,证书则对外出示。
常见持有者包括:
- Web 服务器(TLS 服务器证书)
- 个人 / 设备(客户端证书、邮件签名加密)
- 软件发布者(代码签名证书)
证书只证明「公钥与身份的绑定」;真正能证明「我就是证书主人」的,是私钥参与的签名或握手。
依赖方(Relying Party)
依赖方是「信不信这张证书」的实际决策者:浏览器、操作系统、API 客户端、邮件客户端等。
它的工作大致是:拿到对方证书链 → 校验签名与路径 → 检查有效期 / 用途 / 域名 → 查询是否吊销 → 决定是否建立信任。依赖方不签发证书,但决定信任是否生效;Root Store 配错、校验逻辑松,都会直接削弱 PKI 的安全效果。
吊销与状态服务(CRL / OCSP)
证书有有效期,但有效期内也可能作废(私钥泄露、域名易主、员工离职等)。这时需要一种机制告诉依赖方:「这张证别再信了」。
- CRL(Certificate Revocation List):CA 定期发布的吊销列表,依赖方下载后本地比对。
- OCSP(Online Certificate Status Protocol):按证书实时查询状态,更细粒度;也有 OCSP Stapling 等优化,减轻对 OCSP 服务的依赖。
没有可靠的吊销通道,被盗私钥对应的证书在过期前仍可能被滥用——因此吊销是 PKI 运转中不可省略的一环。
证书:把身份绑到公钥上
数字证书本质上是一份由 CA 签名的文档,把「主体是谁」和「公钥是什么」绑在一起。常见字段至少包括:
- 主体信息(域名、组织、个人标识等)
- 公钥及算法标识
- 有效期
- 颁发者
- 扩展项(密钥用途、SAN、CRL 分发点等)
- CA 的数字签名
验证时:用颁发者的公钥校验签名 → 确认「这份绑定关系未经篡改,且由该 CA 声明」。若颁发者本身也被上级 CA 信任,信任就可以沿链条向上传递。
证书格式:大家都站在 X.509 上
无论国际还是国密,实务里主流证书几乎都落在 X.509 v3 骨架上:ASN.1 定义结构,DER 编码成字节流,再用 PEM(-----BEGIN CERTIFICATE-----)或 DER 文件分发。
也就是说,格式框架是统一的;真正拉开差异的,是里面填的算法、OID、密钥用途约定,以及信任体系与协议栈是否认这套算法。
常见「外壳」还可以顺带提一句:
- 证书本身:X.509(
.cer/.crt/.pem) - 私钥与证书打包:PKCS#12(
.p12/.pfx)、PKCS#8 等 - 申请材料:PKCS#10(CSR)
这些容器国际与国密场景都会用,差别仍在算法套件。
国际证书(RSA / ECC 体系)
常说的「国际证书」,一般指遵循 IETF PKIX(RFC 5280 等)实践、算法走国际主流套件的 X.509 证书:
| 环节 | 常见选择 |
|---|---|
| 公钥算法 | RSA(2048/3072…)、ECDSA(P-256 / P-384 等) |
| 摘要 / 签名 | SHA-256、SHA-384 等;如 sha256WithRSAEncryption、ecdsa-with-SHA256 |
| 对称加密(协议侧) | AES 等(证书本身不承载会话密钥,TLS 里另协商) |
特点可以概括为:
- 生态成熟:浏览器、操作系统、OpenSSL、Java、Go 等默认支持,Root Store 也以国际公信 CA 为主。
- 一张证多用:TLS 服务器证书常见同一把密钥既做握手认证,也参与密钥交换相关能力(具体取决于 Key Usage / 协议版本);个人证书、代码签名等按用途拆分,但签名与加密密钥分离不是硬性制度。
- 互操作性好:跨国网站、公有云、开源软件栈基本以此为准。
国密证书(SM 算法体系)
国密证书同样可以是 X.509 v3,但算法与规范约束换成国家商用密码体系,相关格式要求见 GM/T 0015(《数字证书格式》)等标准。核心算法通常是:
| 算法 | 作用 |
|---|---|
| SM2 | 椭圆曲线公钥算法(签名、密钥交换、公钥加密) |
| SM3 | 杂凑算法(类似 SHA 族的角色) |
| SM4 | 分组对称算法(多用于协议层加解密) |
证书里用国密 OID 标明算法,例如(常见值,便于对照):
- SM2 公钥:
1.2.156.10197.1.301 - SM3withSM2 签名:
1.2.156.10197.1.501
国密实践里一个醒目特点是双证书(尤其在电子政务、金融等场景):
- 签名证书:Key Usage 侧重
digitalSignature(及不可否认等),私钥本地生成、不可导出为宜。 - 加密证书:Key Usage 侧重
keyEncipherment/ 数据加密,加密私钥常由 CA 侧参与生成或托管,便于密钥恢复等业务要求。
两张证 Subject 指向同一主体,但密钥、序列号、用途分离——这和许多国际 TLS 场景「一张服务器证打天下」的习惯不同。
双证私钥生成差异
双证不只是「发两张证」,关键在于两把私钥从哪来、谁能拿到。这直接决定了抗抵赖和密钥恢复能不能同时成立。
签名私钥:用户侧生成,CA 碰不到
典型流程:
- 在 USB Key / 智能卡 / 本地密码模块里生成 SM2 签名密钥对
- 私钥不出载体(不可导出)
- 仅把公钥打进 CSR,交给 RA/CA 审核签发签名证书
这样「谁签的谁负责」才说得通:CA 从未持有签名私钥,事后无法伪造用户签名,也满足不可否认的业务要求。
加密私钥:CA / 密钥管理中心生成,可托管恢复
加密密钥若也只存在用户本地、丢失即无法解密历史密文,对邮件归档、公文、监管取证都不友好。因此常见做法是:
- KMC(密钥管理中心)或 CA 生成加密密钥对
- 用加密公钥签发加密证书
- 加密私钥经保护后下发给用户(常见:用用户的签名公钥做数字信封 / SM2 加密包裹,用户再用签名私钥解开并写入 Key)
- CA/KMC 留存或可恢复加密私钥副本(密钥托管 / 密钥恢复)
于是出现不对称的安全模型:
| 签名密钥 | 加密密钥 | |
|---|---|---|
| 谁生成 | 用户(或用户侧密码设备) | CA / KMC |
| 私钥是否离开生成方 | 一般否 | 会安全下发到用户,且服务端可保留恢复能力 |
| 设计目标 | 抗抵赖、身份认证 | 保密通信,且支持遗失/离职后的密文恢复 |
| 丢失后果 | 重新申请签名证即可(历史签名仍可验) | 若无托管,历史密文可能永久无法解密 |
申请双证时,客户端往往先完成签名证申请,再凭已有的签名能力去「拆开」CA 下发的加密私钥保护包——所以你会看到不少国密 RA/客户端流程里,签名证与加密证成对申请、顺序依赖。
需要注意:不是所有国密部署都严格走「加密钥必托管」。设备证、某些 TLS 网关场景可能简化;但在电子签章、安全邮件、政务公文这类「既要抗抵赖又要能解密归档」的业务里,上述差异几乎是标配。
特性对比
| 维度 | 国际证书 | 国密证书 |
|---|---|---|
| 结构骨架 | X.509 v3 | X.509 v3(GM/T 0015 约束) |
| 典型算法 | RSA / ECDSA + SHA-2 | SM2 + SM3(协议侧常配 SM4) |
| 密钥组织 | 多为单证;按业务再拆分 | 常强制签名证 + 加密证 |
| 信任源 | 国际 Root Store / 公信 CA | 国密根体系、行业/政务 CA |
| 协议与客户端 | 标准 TLS、主流浏览器原生支持 | 国密 TLS(如 GMTLS)、需国密栈或网关 |
| 主要驱动力 | 全球互联互通 | 国内合规(《密码法》、等保等) |
一句话:格式可以长得很像,算法、OID、双证约定和信任域却不是一回事。 把国密证塞进只认 RSA/ECDSA 的浏览器,或把国际证接到只认 SM 套件的国密网关,都会在校验或握手阶段失败——问题往往不在「是不是证书」,而在「对方认不认这套密码与 OID」。
实际部署里也常见「双栈」:同一业务同时提供国际 TLS 与国密 TLS,或由 SSL 网关做算法终结,对内再转统一协议。选型时先分清合规要求与客户端能力,再谈证书申请与链搭建。
信任链:从叶子到根
实际场景很少直接用根 CA 签终端证书,而是分层:
根 CA(Root)
└── 中间 CA(Intermediate)
└── 服务器/用户证书(Leaf)
校验流程可以概括为:
- 拿到对方出示的叶子证书(及中间证书)
- 沿签发关系向上验证签名,直到某个本地已信任的根
- 检查有效期、用途(Extended Key Usage)、域名匹配(SAN)等
- 查询是否被吊销(CRL / OCSP)
任一步失败,信任不成立。这就是「证书链校验」。
理想情况下,依赖方本地只认「自家」那一棵树。现实里机构并购、行业互联、国密与国际双栈、根密钥轮换,都会打破这种单树假设——于是出现交叉信任与信任根更换两类高频问题。
证书交叉信任
交叉信任(cross-certification)解决的是:两套各自独立的 PKI,如何让对方的用户也能验对方的证书。
常见形态:
PKI-A 的根 ──交叉签──→ PKI-B 的根(或中间)
PKI-B 的根 ──交叉签──→ PKI-A 的根(或中间) // 双向时
含义是:A 根用自己的私钥给 B 的 CA 证书签名(或反之),于是「只信任 A 根」的依赖方,可以把 B 域下的叶子证书桥接到 A 根上完成路径构建。行业里也常见用**桥 CA(Bridge CA)**做星型枢纽,避免每两家都签一对交叉证。
交叉信任带来的实际麻烦:
- 路径不再唯一:同一张叶子证可能走出多条到不同信任锚的路径,客户端要做路径构建与策略筛选(证书策略 OID、名称约束、路径长度约束等)。
- 策略不对齐:A 的审核标准、密钥用途、算法套件若与 B 不一致,交叉签等于「把信任边界开口」——开口多大,风险就多大。
- 国密 / 国际并存:两边算法、OID、双证约定不同时,交叉往往不只是「签一张交叉证」,还要保证依赖方密码栈两边都能验;很多现场干脆用网关或双证书部署回避真交叉。
- 吊销与生命周期:交叉证本身也要管有效期和吊销;交叉关系撤销后,原先「绕过去」的信任路径应立即失效,否则会出现幽灵信任。
一句话:交叉信任是组织间互联的刚需,但也是 PKI 运维里最容易配错、最难排查的一环——出问题时常表现为「有的客户端能过、有的不能」,根因多在路径构建或策略约束,而不在叶子证本身坏了。
信任根更换(Root Rollover)
根 CA 也有寿命:算法升级(如淘汰弱签名)、密钥泄露应对、合规要求更换、厂商/行业根迁移,都会触发信任根更换。根不能「说换就换」,因为依赖方 Root Store 的更新往往滞后于 CA 侧发证。
实务上更稳妥的是新旧根并存的滚动切换,而不是硬切:
- 生成新根,私钥离线保管;必要时先发新中间 CA。
- 交叉或链桥过渡:用旧根给新根(或新中间)签名,和/或用新根给旧中间签名,让「只信旧根」与「已信新根」的客户端在过渡期都能构出有效路径。
- 并行签发:过渡期内叶子证可挂在新旧两条链上,或服务器同时下发可被两边锚定的证书链。
- 推动信任锚更新:操作系统、浏览器、行业终端、嵌入式设备逐步纳入新根;内网场景则靠组策略 / MDM / 镜像预置。
- 退役旧根:确认依赖方已普遍信任新根、旧链上证书到期或完成再签发后,停止用旧根签发,并按计划吊销/过期旧交叉关系,最后从 Root Store 移除旧锚。
几个容易踩坑的点:
- 只换了服务器证、没管客户端 Root Store → 外网浏览器可能已有新根,内网老系统、IoT、定制 App 仍只认旧根。
- 过渡期太短 → 嵌入式与离线设备更新周期以年计,根切换窗口往往以年而不是以周计。
- 链不完整:服务器只送叶子、漏送「旧根→新中间」所需的交叉/中间证书,部分客户端无法完成路径构建。
- 国密根迁移同样适用上述节奏,还要额外确认新根算法、OID 与终端国密模块是否匹配。
信任链的本质是「走到本地某个已信锚为止」。交叉信任是在空间上把多棵树接起来;根更换是在时间上把锚点平滑迁走。两者都要求 CA、业务系统和依赖方三方协同,单靠「重新申请一张叶子证」通常不够。
证书透明与 CT Logs
根与公信 CA 之所以「换得慎重」,不只因为 Root Store 更新慢,还因为公网 PKI 默认假设:任意被浏览器信任的 CA,理论上都能给你的域名签一张证。若某家 CA 被攻破或违规签发,受害者往往事后才发现。**证书透明(Certificate Transparency, CT)**就是为这件事加的一层「公开发行账本」。
CT 在解决什么
CT 要求公信 CA 在签发(或预证书阶段)后,把证书提交到公开的 CT Log,换取 SCT(Signed Certificate Timestamp)。主流浏览器对公信 TLS 证书会检查:是否带有足够数量、来自合规日志的 SCT;不满足则握手失败或告警。
效果是:
- 签发不可偷偷摸摸:进了 Log,域名所有者、安全研究员、浏览器厂商都能扫到「谁给我的域名发过证」。
- 误签发可被追责:历史上多起 CA 不信任 / 根降级事件,都与公开可审计的签发记录有关;CT 让「悄悄发一张钓鱼证」变得很难长期瞒住。
- 与根更换联动:新根、新中间要进入公信生态,除了过 Root Store 审核,签发流程也要接入 CT;旧 CA 被移出信任时,人们也能回溯 Log,评估影响面。
CT Log 长什么样
CT Log 是只能追加、带密码学承诺的日志(基于 Merkle Tree):
- CA 提交预证书 / 证书
- Log 返回 SCT(可视为「我已承诺收录」的回执)
- 证书稍后正式进入 Log;任何人可查询、监控
- Log 定期公布树根哈希(STH),便于外部审计「历史有没有被改写」
SCT 出现在证书扩展、OCSP、或 TLS 握手扩展里均可,浏览器认的是「有没有合规 SCT」,不要求你亲自去翻 Log。
Log 的运营方需要长期高可用与社区审计,常见参与者包括 Google、Cloudflare、DigiCert、Let's Encrypt 等;国内公信 CA 亚洲诚信(TrustAsia) 也对外运营 CT 日志服务,是公网 CT 生态里为数不多的非美运营商之一。CA 既是 Log 的「投稿人」(自己签发的证要送去记账),也可以是 Log 的「记账人」。
跟运维 / 换根的关系
- 申请公网证书:现在几乎默认走 CT;Let's Encrypt、商业 CA 都会帮你搞定提交与 SCT 嵌入。
- 自己监控域名:用 CRT.sh、各大 CT 监控服务盯 SAN/CN,一旦出现未知 CA 签发的证,往往是最早的告警信号——换根、换 CA、被误签时都很有用。
- 私有 CA / 国密内网:一般不强制 CT;浏览器 CT 策略针对的是公信根。内网自签、行业国密根通常靠自己的信任锚与管理制度,而不是公共 CT Log。
- 根或 CA 退役期:一边滚新旧链,一边用 CT 确认「新链是否已在公网可见、旧 CA 是否还在异常签发」;对依赖方来说,这是换锚之外的另一层可见性。
可以把它理解成:证书链回答「这张证密码学上能否验过」;CT 回答「这张证的签发有没有被公开记账」。信任根更换改变的是锚点,CT 改变的是公信签发的可审计性——两者一起,才让现代公网 PKI 在「不得不信一批根」的前提下,还能对误签与作恶保持压力。
信任如何落地到 HTTPS
HTTPS 可以粗理解为 HTTP over TLS:浏览器先和服务器完成一次 TLS 握手,谈妥身份与会话密钥,再在加密通道里传 HTTP。PKI 证书主要出现在握手阶段——用来回答「对面是不是我要访问的那个站点」。
以访问 https://example.com 为例,证书相关步骤通常是:
- 服务器在 TLS 握手中出示证书链
- 浏览器验证链是否锚定到本地根 CA(以及 SCT / 吊销等策略)
- 确认证书主体匹配当前域名(SAN)
- 用证书中的公钥(或证书证明的身份)完成认证与密钥协商
之后应用数据加密传输;「对方确实是 example.com」来自 PKI,会话机密性来自握手谈成的对称密钥。两者缺一,都称不上完整的 HTTPS 信任。
TLS 握手在做什么
握手要同时办成三件事:协商版本与算法、认证身份、得出共享密钥。以仍广泛部署的 TLS 1.2 心智模型为例(简化):
- ClientHello:客户端声明支持的协议版本、加密套件列表、扩展(SNI、ALPN、supported_groups 等)
- ServerHello:服务端选定版本与套件,下发证书链(Certificate),必要时发送密钥交换参数(ServerKeyExchange)
- 客户端验证书:链校验、域名匹配、用途检查;失败则直接断连
- 密钥交换:双方用 ECDHE 等机制生成预主密钥 / 共享秘密,再派生出流量密钥
- Finished:用握手摘要做完整性确认,此后切换到应用数据加密
TLS 1.3 把流程压得更扁:去掉了静态 RSA 密钥传输、合并了不少消息,通常 1-RTT 就能完成(还有 0-RTT 早期数据,但有重放风险,需谨慎开启)。对运维而言,体感就是:更少往返、密码套件更短、老旧算法被直接剔除。
证书在这里的角色很明确:它不加密整条 HTTP,而是证明「持有对应私钥的那一方,身份已由 CA 担保」;真正的大批量加解密,交给握手后派生的对称密钥(AES-GCM、ChaCha20-Poly1305 等)。
双向 TLS(mTLS)只是在对称位置再加一步:服务器也要求客户端出示证书并校验——常见于 API、微服务、国密网关内侧。
SSL / TLS 协议版本简史
名字上还常听到 SSL,实际上现代 HTTPS 用的是 TLS;SSL 已属历史包袱。
| 版本 | 大致状态 | 备注 |
|---|---|---|
| SSL 2.0 / 3.0 | 禁用 | 设计缺陷与已知攻击(如 POODLE),不应再启用 |
| TLS 1.0 / 1.1 | 已淘汰 | 主流浏览器与 PCI 等规范已弃用 |
| TLS 1.2 | 仍广泛使用 | 需正确配置套件与扩展,避免老旧算法 |
| TLS 1.3 | 当前推荐 | 更简洁、默认前向保密,公网新部署优先 |
版本协商发生在握手开头:客户端报支持列表,服务端选双方交集中的一个。配错的典型症状是「有的旧客户端能连、新浏览器反而报错」,或反过来——多半是服务端只开了过窄/过老的版本集。
国密场景还有 GB/T 38636、GMTLS 等国密 TLS 协议栈(常与 SM2/SM3/SM4 套件绑定),和 IETF TLS 并行存在;双栈站点往往国际走 TLS 1.2/1.3,国密走专用端口或网关,而不是在同一握手里「混用两套密码哲学」。
加密套件与协议怎么配合
**加密套件(Cipher Suite)**是握手时点名的一串算法组合。TLS 1.2 的名字较长,大致编码了:
- 密钥交换 / 认证(如
ECDHE_RSA、ECDHE_ECDSA) - 批量加密(如
AES_128_GCM、CHACHA20_POLY1305) - 伪随机与完整性相关组件(AEAD 套件里完整性已含在 GCM/Poly1305 中)
例如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 可读成:用 ECDHE 交换密钥、用 RSA 证书做服务器身份认证、用 AES-GCM 保护记录层。
选型时几个实用点:
- 优先 ECDHE + AEAD:具备前向保密(PFS),服务器长期私钥泄露也不应解密历史流量。
- 证书算法要对上套件:RSA 证书对
*_RSA_*,ECDSA 证书对*_ECDSA_*;国密则是 SM2 证书配 SM 套件。证书换了算法,套件列表也要跟着改,否则握手失败。 - TLS 1.3 套件更短:形如
TLS_AES_128_GCM_SHA256,密钥交换与认证从套件名里拆出去,由扩展协商(supported_groups、证书类型等)。能开 1.3 就少纠结一长串 1.2 套件名。 - 协议与套件是两层旋钮:只升级到 TLS 1.2 但仍启用
RSA密钥传输、RC4、3DES 等,安全性依旧差;反过来套件很新但版本锁死在 1.0,也会被策略拦截。
新成员:后量子算法(PQC)
经典套件里的 RSA / ECDH / ECDSA,安全性建立在大数分解或椭圆曲线离散对数上。大规模量子计算机一旦可用,Shor 算法会把这些难题「拆掉」——于是出现 Harvest Now, Decrypt Later:对手先囤积密文,等量子能力成熟再解密。HTTPS 要抗这一威胁,密钥交换与签名两侧都得换血。
NIST 已落地第一批后量子标准(2024),名字从竞赛代号改成了正式名:
| 正式名 | 来源 / 标准 | 角色 | 大致对应今天的 |
|---|---|---|---|
| ML-KEM | Kyber,FIPS 203 | 密钥封装(KEM),做密钥建立 | ECDHE / 经典密钥交换 |
| ML-DSA | Dilithium,FIPS 204 | 数字签名(主推) | RSA / ECDSA 签名与证书 |
| SLH-DSA | SPHINCS+,FIPS 205 | 无状态哈希签名(备份路线) | 长寿命信任锚、算法多样性 |
| FN-DSA(进行中) | Falcon,FIPS 206 草案 | 更紧凑的格基签名 | 受限环境、要更小签名时 |
对 TLS / PKI 的直觉映射:
- 握手里的「密钥交换」 → 看
supported_groups:除了x25519、secp256r1,会逐渐出现mlkem768等;实务过渡期大量用 混合(hybrid),例如 X25519 + ML-KEM,两边都过才算成功,避免「PQC 实现尚新、经典仍兜底」。 - 握手里的「身份认证」 → 看
signature_algorithms/ 证书:IETF 正在把 ML-DSA-44 / 65 / 87 挂进 TLS(如mldsa44、mldsa65、mldsa87)。证书里的公钥与 CA 签名算法也会走向 ML-DSA(或混合证书链)。 - 记录层对称加密 → AES-GCM、ChaCha20 等本身对量子攻击相对更稳(主要担心 Grover,靠加长密钥应对),所以「套件名里那截 AES」往往暂时不动,变的是前面的 KEM + 签名。
和传统套件选型相比,PQC 多几条现实约束:
- 体积变大:ML-DSA 公钥、签名比 ECDSA 大一个数量级上下,证书链、握手报文、CT Log 条目都会变胖;CDN / 嵌入式要重新估带宽与 MTU。
- 生态仍在爬坡:浏览器、OpenSSL、商用 CA、国密侧的后量子路线并不整齐;公网常见路径是「先开 hybrid KEM,签名/证书稍后再迁」。
- 算法多样性:主路径 ML-KEM + ML-DSA,关键根或长期签名可考虑 SLH-DSA 做异构备份,避免「一个格基假设塌了全军覆没」。
- 与国密关系:国密当前主战场仍是 SM2/SM3/SM4;后量子是另一条并行演进线。长期可能出现「国密 + PQC」或国际 hybrid 并存,草稿阶段先分清两条时间表,不要假设已经互相取代。
一句话:加密套件的「成员名单」正在从 RSA/ECDHE 扩到 ML-KEM / ML-DSA 等后量子算法;TLS 1.3 的扩展机制正好适合接纳它们,而 PKI 要同步准备更大的证书与可能的混合信任链。
可以把关系收成一句:
- 协议版本决定握手怎么走、哪些能力允许存在
- 加密套件 / 协商扩展决定这一次连接具体用哪组算法(含经典与后量子)
- 证书 / PKI决定身份能不能被信(签名算法同样在迁向 ML-DSA 等)
HTTPS 的「小锁」是这三层一起亮起来的结果,而不是单独某一层的功劳。
小结
回头串一下这条线:
- 问题:非对称加密能用密钥,但不能单独证明「公钥属于谁」。
- 角色:CA 签发、RA 审核、持有者保管私钥、依赖方做校验、CRL/OCSP 处理作废——PKI 是一套协作,而不是一张证。
- 证书:X.509 把身份绑到公钥;国际体系走 RSA/ECDSA,国密走 SM2 双证(签名钥本地生成、加密钥常可托管恢复),格式骨架相近,算法与信任域不同。
- 信任链:校验要走到本地信任锚;交叉信任在空间上接树,根更换在时间上迁锚;公网还有 CT Logs 给签发记账,让误签与作恶更难藏。
- 落到 HTTPS:TLS 握手完成认证与密钥协商;版本(如今主看 1.2/1.3)、加密套件/协商扩展、证书三者缺一不可。套件名单已从 ECDHE+AES 扩到 ML-KEM / ML-DSA 等后量子成员,过渡期多见 hybrid。
一句话:加密保证信道安全,证书与信任链保证身份可信,CT 与协议演进保证这套信任还能被审计、还能跟着密码学一起升级。 小锁背后,是角色、格式、锚点、日志和握手共同撑起来的体系。