feat(ql3): establish 3.0 incubation baseline

This commit is contained in:
whyour
2026-08-12 00:25:26 +08:00
parent 4bf92dcfeb
commit c699c32461
2817 changed files with 779642 additions and 653 deletions
@@ -0,0 +1,67 @@
# ADR-0251Worker 管理吊销证据的双 PKI 信任域分离
- 状态:Accepted
- 日期:2026-08-01
- 关联 RFCQL-RFC-0001 D-231、D-232、D-233、D-234
- 关联 ADRADR-0247、ADR-0248、ADR-0249、ADR-0250
- 取代范围:ADR-0248/D-232 中“同 endpoint/CA”的模糊约束,以及 PKI evidence v1
## 背景
D-232 v1 从 production client config 的 `caFile` 读取管理 API 服务端 TLS CA,同时要求该 CA 直接签发 old/new
客户端证书。这把两个独立方向的认证错误合并为一个 PKI:
- client → managerclient config 的 server trust bundle 验证管理 API 服务端证书;
- manager → clientmanager 的 client trust bundle/CRL 验证客户端证书及吊销状态。
实际生产部署通常由 ingress/server PKI 和 operator/client PKI 分别管理。D-234 已显式要求服务端 trust 与客户端
issuer 分离;继续接受 D-232 v1 会拒绝正确拓扑,也会让后续统一 release gate 无法可靠绑定两类事实。
## 决策
1. D-232 报告和 before-state 升级为 schema/fixture v2v1 不再构成兼容发布证据。离线 auditor 必须拒绝 v1
防止旧报告在修复后继续被提升为有效双 PKI 证明。
2. old/new production client config 仍必须使用同一 HTTPS endpoint、servername、server trust bundle 和 inspect
command,但 `caFile` 只验证服务端 TLS。server trust bundle 必须是严格 UTF-8、只含 1–16 张唯一、当前有效
`ca=true` 的 PEM CA;报告保留原始 bundle digest 和有序 authority fingerprint 集合。
3. runner 新增 exact `--client-issuer-ca` 输入。它必须只含一张当前有效 CA;old/new 两张 client certificate 都
必须由它签发并验证通过,且证书仍需匹配各自 private key、非 CA、具备 clientAuth EKU、处于有效期。
4. OpenSSL 以 RFC2253 规范化 client issuer CA subject 与 CRL issuerCRL issuer digest 必须精确等于显式 CA
subject digest。before/after 必须继续使用同一 issuer CA bundle/certificate/subjectCRL number、lastUpdate
和原始摘要按原 D-232 规则单调前进。
5. v2 transport 只报告 server trust bundle/authority digestv2 PKI section 独立报告 client issuer bundle、CA
fingerprint、subject digest 和 CRL facts。`serverTrustSeparatedFromClientIssuer` 表示两条链独立验证,不要求
它们的 certificate 必须不同,但禁止通过同一个隐式字段证明两种方向。
6. D-232 继续只证明同一 client issuer 下的单证书吊销;跨 CA old→overlap→new 必须使用 D-234。runner 不读取
Secret、不修改 Deployment/PKI/RBAC,不新增 package、依赖、migration 或常驻资源。
## 失败与迁移
- 缺少 `--client-issuer-ca`、文件含多张/非 CA/过期/重复/附加文本:在 Kubernetes/client 请求前失败关闭;
- old/new 任一证书不由显式 CA 签发,或 CRL issuer 不匹配该 CA:不创建 before/final 输出;
- server trust 或 client issuer 在 before/after 漂移:拒绝拼接两个阶段;
- 已保存的 v1 报告可作为历史原始记录保留,但不能通过 v2 auditor,也不能进入 D-235 统一 release evidence
- 若组织确实使用同一根 CA,仍必须通过两个独立输入和两组摘要明确证明两个方向,不能省略 issuer 输入。
## 被拒绝的替代方案
### 保留 v1 并把字段改名
拒绝。只改名仍会让 client leaf 由 server trust CA 验证,无法支持双 PKI,也会让旧报告与新语义不可区分。
### 从客户端证书的 issuer 文本推断 CA
拒绝。issuer DN 不是签名证明,可能发生同名 CA;必须提供具体 CA certificate 并执行 `checkIssued` 与签名验证。
### 要求 D-234 替代所有 D-232 吊销证据
拒绝。CA rollover 与同 issuer 单证书 revocation 是两个正交控制;前者不能证明 CRL number 单调和被吊销 leaf
统一拒绝,后者也不能证明 trust overlap 与 CA 安全退休。
## 验证
- D-232 v2 runner/auditor 9/9:原两阶段/CRL/rollout/RBAC/报告/CLI 覆盖全部保留;
- 新增错误 issuer 负向测试,在任何 client access 前失败;
- 新增真实 OpenSSL 双 PKI 测试:server trust CA-A、client issuer CA-Bclient config 与 issuer signature 均验证
成功,两个 fingerprint 明确不同;
- `node --check` 与 D-232 定向测试通过;workspace package、第三方依赖和 Profile 闭包不变。