摘要

  • RFC 8360 允许支持新版配置的依赖方从证书路径中计算“已验证资源集”(VRS);当 CA 证书超申领时,仅剔除无依据的部分,而不是自动判整条下级子树失效。
  • 这种处理只适用于携带新版策略和资源扩展 OID 的证书;旧配置仍须拒绝,而且 ROA 或 BGPsec 路由器证书所声明的每项资源都必须完整落在 VRS 内。

错误为何会沿层级放大

RPKI 资源证书把公钥与 IP 地址块、自治系统号码绑定起来。子级的权利不是孤立声明,而是从签发者逐层继承到信任锚。RFC 3779 定义了证书中的 IP 与 AS 资源扩展,RFC 6487 则把它们放进 RPKI 的证书配置与验证流程。

原来的规则非常干脆:只要一张 CA 证书申领了签发者有效资源范围之外的任何一项资源,整张证书就验证失败。依赖它的下级证书、ROA 和其他签名对象也随之失去有效路径。若错误发生在层级上端,即使只有一小段资源写错,影响面也可能覆盖一个很大的子树。

超申领未必意味着恶意。资源转移后,上级的持有范围会缩小;下级可能尚未及时申请新证书;分配数据库与证书管理系统也可能短暂不同步。RFC 8360 的作者在 2018 年判断这类情况发生概率较低,却强调后果可能很重。设计难题因此变成:如何拒绝错误,同时不把无关的正确授权拖下水。

这份标准由 Geoff Huston、George Michaelson、Carlos Martinez、Tim Bruijnzeels、Andrew Newton 与 Donald Shaw 共同完成。它引入的关键对象叫 Verified Resource Set,即 VRS。验证器不再把证书上“写了什么”直接当成“有权使用什么”,而是沿已经验证的证书路径逐级取交集,只保留每一层都能支撑的资源。

交集不是宽容,而是权限上限

RFC 8360 分别计算 VRS-IP 与 VRS-AS。前者处理 IP 地址资源,后者处理自治系统号码。没有超申领时,新旧算法的结果相同;出现超申领时,证书声明与 VRS 之间的差额就是被排除的部分。

新的行为还必须由证书明确表态。RFC 8360 定义了第二版证书策略 OID 和新的资源扩展 OID。证书采用这些 OID 时,支持该标准的依赖方会列出超申领资源、发出警告,然后仅凭 VRS 继续验证。若证书仍采用 RFC 6487 的旧策略,超申领就必须导致拒绝。新算法不是验证器偷偷放宽旧证书,而是一套有清楚兼容边界的新语义。

即使 VRS 为空,这条边界也不松动。标准没有要求仅因 VRS 为空就立刻拒绝 CA 证书,因为资源收缩可能是暂时状态;但是空集无法支撑任何下级资源声明。证书可以留在可观察的层级中,授权能力却为零。

RFC 给出的例子很直观:一个下级 CA 同时声明路径确实支持的 192.0.2.0/24,以及路径并不支持的 198.51.100.0/24。VRS 只留下前者。为前者制作的 ROA 可以有效,为后者制作的 ROA 仍然无效。留下有效分支,不等于承认多出来的前缀。

到了签名对象,检查仍要重新过关

CA 证书在新算法下存活,不代表它下面的对象被打包放行。RFC 6482 定义的 ROA 需要由末端实体证书签署;RFC 8360 要求 ROA 中的每个前缀都包含在该证书的 VRS-IP 内。若一张 ROA 混装一个有效前缀和一个越界前缀,整张 ROA 仍会失败。

因此,标准提示资源持有者可以按前缀拆分 ROA。把彼此独立的资源塞入同一对象,会人为制造共同故障域;拆分后,丢失一段资源不必同时毁掉其他路由起源授权。BGPsec 路由器证书也遵循相同思路:其中每个 ASN 都必须落在 VRS-AS 内,按 ASN 分发不同证书可以缩小连带影响。

算法还有明确的范围限制。VRS 是在单个信任锚之下计算的,不处理多个信任锚之间相互重叠的资源申领。它也没有把依赖方的本地偏好升级成资源所有权。RFC 8360 改变的是一条证书路径内的错误隔离方式,不是授权来源。

迁移顺序本身就是协议条件

新版 OID 会制造兼容性门槛。不了解它们的旧依赖方工具会拒绝新配置证书,所以部署不能从 CA 单方面开始。标准要求验证端先获得支持,CA 再使用新版 OID。签发者能生成新证书,并不表示生态中的使用者已经能理解它。

迁移也无需一次完成。配置可按证书选择:根证书可以继续使用旧策略,某个下级 CA 则采用新策略,只要验证器支持替代算法。这使运营者能够优先在故障半径最大的层级引入隔离,而不必整棵树同日切换。

RFC 8488 留下了一张 2018 年的实现快照。它描述当时 RIPE NCC Validator 提供由运营者选择的严格验证选项,并在非严格配置下采用替代路径算法。这只能说明某个实现当年如何暴露迁移选择,不能推断今天的软件默认值,也不能替代 RFC 8360 按证书 OID 划定的规范语义。

Bruijnzeels 与合著者的贡献并不是让验证器“忽略错误”,而是把三个问题分开回答:错误在哪里,仍能证明的资源有哪些,哪些下级对象真正依赖越界部分。超申领仍被记录,超出的资源仍不可用,正确继承的资源却不再仅因相邻错误而陪葬。

资料来源