Skip to content

AID 身份体系与证书信任模型

在深入协议细节之前,需要先理解 AUN 的核心身份系统:AID (Agent Identifier) 及其基于 X.509 证书的信任模型。

什么是 AID

AID 是 AUN 网络中的全局唯一身份标识,格式为:

{name}.{issuer}

其中 {name} 是用户名(不允许包含 .),{issuer} 是签发者域名(可以是多级域名)。

命名规则

  • name:仅允许 [a-z0-9_-],首字符不允许为 -,不允许包含 .
  • issuer:合法的可注册域名,可以是多级(如 aid.pubcompany.co.ukagency.gov.cn
  • AID 不区分大小写,存储和比较时统一转为小写

示例

  • alice.aid.pub — 由 aid.pub 签发的 alice
  • bob.company.com — 由 company.com 签发的 bob
  • device001.iot.org — 由 iot.org 签发的设备
  • agent.company.co.uk — 由 company.co.uk 签发的 agent

关键特性

  • 全局唯一:通过 DNS 域名体系保证唯一性(类似邮箱地址)
  • 自主签发:任何拥有域名的组织都可以成为 Issuer,签发自己的 AID
  • 去中心化:无需中央授权机构,基于 PKI 证书链建立信任
  • 天然映射:AID 可直接映射为邮箱地址(alice.aid.pubalice@aid.pub

AUN 网络与根证书管理局

AUN 是一个去中心化的开放网络,而非由单一组织控制的私有网络。任何组织都可以运营自己的 Root CA 并申请加入 AUN 公共网络,就像任何组织都可以申请成为 HTTPS 的受信 CA 一样。

网络架构

AUN 根证书管理局(AUN Root CA Authority)

    ├── 管理 → 受信根证书列表
    │           ├── Root CA A(组织 A 运营)
    │           ├── Root CA B(组织 B 运营)
    │           └── Root CA C(组织 C 运营)

    └── 各 Root CA 独立运营,签发各自的证书链
        ├── Root CA A → Issuer CA → Agent 证书
        ├── Root CA B → Issuer CA → Agent 证书
        └── Root CA C → Issuer CA → Agent 证书

受信列表中所有 Root CA 签发的 AID 可以互通,形成统一的 AUN 公共网络。不在列表中的 Root CA 只能运行私有 AUN 网络,无法与公共网络互通(但可申请加入)。

AUN 根证书管理局(AUN Root CA Authority)

AUN 受信根证书列表由 AUN 根证书管理局 管理,负责根证书的准入审批和生命周期管理。

治理结构:多方共治模型

AUN 根证书管理局采用**多方共治(Multi-Stakeholder Governance)**模型,类似 ICANN、W3C 或欧盟的治理结构,确保决策的公正性和透明度。

治理结构包括:

  • 理事会:技术社区、商业组织、学术机构、政府/监管机构、独立专家代表
  • 技术委员会:制定证书策略,审查技术合规性
  • 审计委员会:监督审计,确保透明度和问责制
  • 运营团队:日常运营,维护 HSM 和密钥

详细的治理机制、决策流程、密钥管理请参考:Root CA 治理机制

管理局证书

管理局持有一张自签名证书,与 Root CA 证书本质相同(自签名、P-384、HSM 生成),区别在于职责分离:

管理局证书(AUN Root CA Authority Certificate)
├── 自签名(没有更上层的签发者)
├── P-384 密钥对,离线 HSM 中生成
├── 用途:签名受信根证书列表(不签发下级证书)
├── 公钥:硬编码在所有 AUN 客户端中
├── 多人授权:签名操作需 5/7 理事会成员授权
└── 有效期:30+ 年

Root CA 证书(可以有多个,各组织独立运营)
├── 自签名
├── P-384 密钥对,HSM 中生成
├── 用途:签发 Issuer CA → Agent 证书链
├── 公钥:通过受信根证书列表分发
└── 有效期:20-30 年

信任引导(Trust Bootstrap)

客户端硬编码管理局证书公钥

    └─ 验签 → 受信根证书列表(管理局私钥签名)

                  ├── Root CA A(自签名)→ 签发证书链 → Agent 证书
                  ├── Root CA B(自签名)→ 签发证书链 → Agent 证书
                  └── Root CA C(自签名)→ 签发证书链 → Agent 证书

信任起点是客户端代码本身:用户信任 AUN 客户端软件,就信任其硬编码的管理局公钥,进而信任管理局签名的受信列表,最终信任列表中 Root CA 签发的所有 Agent 证书。这与浏览器信任模型一致(信任 Chrome → 信任 Google 维护的根证书列表 → 信任列表中的 CA)。

职责分离的安全意义

证书类型职责泄露影响
管理局证书签名受信根证书列表可伪造列表加入恶意 Root CA,但不能直接签发 Agent 证书
Root CA 证书签发 Issuer CA → Agent 证书链可伪造该 Root CA 下的 Agent 证书,但不影响管理局和其他 Root CA

Root CA 准入与退出

准入流程概览

Root CA 加入 AUN 受信列表需要经过严格的审查流程(约 4-5 个月):

  1. 提交申请(第 1 周):提交 Root CA 证书、审计报告、技术文档等
  2. 技术审查(第 2-9 周):HSM 验证、CRL/OCSP 测试、CP/CPS 审查
  3. 合规审查(第 10-13 周):审计报告审查、法律合规检查、财务评估
  4. 公示期(第 13-17 周):公开征求社区反馈(30 天)
  5. 理事会投票(第 18 周):需 2/3 多数通过(至少 5/7 赞成)
  6. 加入列表(第 19 周):管理局签名发布新列表

详细的准入条件、审查标准、流程说明请参考:Root CA 准入流程

退出与吊销机制

Root CA 可以主动退出或被吊销:

类型触发条件过渡期决策要求迁移支持
主动退出Root CA 申请90-180 天简单多数Root CA 负责
合规吊销违反证书策略30-90 天2/3 多数管理局协助
紧急吊销私钥泄露立即1/2 多数管理局主导

退出/吊销后,管理局协助受影响的 Issuer CA 迁移到其他 Root CA,确保平稳过渡。

详细的退出流程、吊销条件、迁移支持请参考:Root CA 治理机制

孤儿 AID 预防与救援

当 Root CA 或 Issuer CA 运营商突然倒闭或退出时,可能导致大量 AID 变成"孤儿 AID"(证书链无法验证)。AUN 建立了完善的预防和救援机制:

  • 预防机制:提前预警系统、强制迁移通知期、证书有效期限制、财务保证金制度
  • 应急救援:应急接管流程、AID 迁移机制、临时证书服务
  • 用户自救:证书备份、跨 Issuer 迁移工具、多 Issuer 备份策略

详细的预防措施、应急流程、迁移方案请参考:AID 孤儿预防与救援机制

受信根证书列表分发

  • 客户端内置初始受信根证书列表
  • 首选从 AUN 根证书管理局权威端点下载:https://trust.aun.network/.well-known/aun/trust-roots.json
  • 不可达时,可从 Issuer PKI 泛域名端点下载:https://pki.{issuer}/trust-root.json,或从 Gateway 镜像端点下载:https://gateway.{issuer}/pki/trust-roots.json
  • 已连接客户端也可通过 meta.trust_roots 方法查询服务端缓存列表(见 06-服务协议
  • Issuer PKI 泛域名服务必须提供 https://pki.{issuer}/root.crt,用于下载该 Issuer 证书链锚定的 Root CA PEM;客户端导入前必须确认其指纹存在于已验签的受信根列表
  • 客户端应定期更新受信列表(建议每 24 小时检查一次)
  • 列表更新由 AUN 根证书管理局签名,防止篡改

证书透明日志

  • Root CA、Registry CA、Issuer CA 以及 Issuer 本地 CA 写操作应写入 CT 日志,便于公开审计证书签发、续期、换钥和吊销行为。
  • Issuer 的公开 CT 查询入口为 https://ct.{issuer},公开 URL 和响应格式必须保持稳定。
  • CT 查询不属于 SDK RPC 能力。客户端或审计方如需检查日志,应直接访问公开 HTTP 端点;完整端点和数据结构见 附录D D.8附录F

证书层级结构

AUN 采用标准 X.509 v3 证书体系,使用 ECDSA 算法,四级证书层级:

Root CA (根证书, P-384, 离线)
  └─ Registry CA (注册CA, P-384, 在线, Root CA 签发)
      └─ Issuer CA: aid.pub (P-384, Registry CA 签发)
          ├─ 内置服务 Agent: auth.aid.pub (P-384)
          ├─ 内置服务 Agent: msg.aid.pub (P-384)
          └─ 终端用户 Agent: alice.aid.pub (P-256 默认, 可选 P-384)

四级 CA 职责与 pathlen 约束

层级证书pathlen可签发对象部署方式
Level 0Root CA2Registry CA离线 HSM,30+ 年
Level 1Registry CA1Issuer CA在线服务,5-10 年
Level 2Issuer CA0Agent 终端证书在线(Auth 服务),10 年
Level 3Agent 证书不可签发终端实体,1-3 年

pathlen 在密码学层面强制执行签发范围,不依赖运营策略:

  • Root CA(pathlen:2)只能签发 Registry CA,不能直接签发 Issuer CA 或 Agent 证书
  • Registry CA(pathlen:1)只能签发 Issuer CA,不能签发 Agent 证书
  • Issuer CA(pathlen:0)只能签发终端证书(Agent),不能签发任何 CA 证书

证书链示例

1. Root CA: CN=AUN Root CA A, O=AgentUnion
   ├─ 自签名根证书
   ├─ 公钥:ECDSA P-384 (384 bit)
   ├─ 签名算法:ECDSA-SHA384
   ├─ 有效期:30 年
   └─ 扩展:CA=true, pathlen=2

2. Registry CA: CN=AUN Registry CA A
   ├─ 由 Root CA 签发
   ├─ 公钥:ECDSA P-384 (384 bit)
   ├─ 签名算法:ECDSA-SHA384
   ├─ 有效期:10 年
   └─ 扩展:CA=true, pathlen=1

3. Issuer CA: CN=aid.pub
   ├─ 由 Registry CA 签发
   ├─ 公钥:ECDSA P-384 (384 bit)
   ├─ 签名算法:ECDSA-SHA384
   ├─ 有效期:10 年
   └─ 扩展:CA=true, pathlen=0

4a. 内置服务 Agent: CN=auth.aid.pub
    ├─ 由 Issuer CA (aid.pub) 签发
    ├─ 公钥:ECDSA P-384 (384 bit)
    ├─ 签名算法:ECDSA-SHA384
    ├─ 有效期:2 年
    └─ AIA: http://aid.pub/ca/cert

4b. 终端用户 Agent: CN=alice.aid.pub
    ├─ 由 Issuer CA (aid.pub) 签发
    ├─ 公钥:ECDSA P-256 (256 bit,默认;可选 P-384)
    ├─ 签名算法:ECDSA-SHA256
    ├─ 有效期:2 年
    └─ AIA: http://aid.pub/ca/cert

证书链关系

alice.aid.pub 的完整信任链:
  alice.aid.pub ← aid.pub ← Registry CA ← Root CA

终端证书生命周期与签名权限

AUN 将“证书是否还能用于产生新签名”与“证书是否还能用于验证历史签名”明确区分。仅凭 X.509 有效期不能表达这种业务语义,因此协议在应用层引入证书生命周期状态。

状态定义

对终端 Agent 证书,AUN 定义以下生命周期状态:

状态含义是否允许产生新签名是否允许验证历史签名
active_signing当前活跃签名证书
verify_only已被新证书替换,仅保留历史验证用途
inactive暂停使用,等待管理员重新激活视实现策略而定
revoked已吊销默认 ❌
expired自然过期仅限历史验证场景按策略处理

唯一活跃签名证书规则

对于同一 AID + curve + key_purpose=signing,AUN 要求在任意时刻最多只有一张证书处于 active_signing 状态。

这意味着:

  • 同一 AID 可以同时持有多张不同曲线证书,例如一张 P-256 和一张 P-384
  • 但同一 AID 的同一曲线签名证书只能有一张是当前活跃证书
  • 被替换的旧证书必须自动降级为 verify_only

该规则用于确保:

  • 当前签名身份唯一,避免并行主证书造成审计歧义
  • 换钥(rekey)后旧私钥即使仍被保留,也不再被协议视为当前可签名密钥
  • 历史签名仍可用旧证书验证,不破坏可追溯性

renew 与 rekey

AUN 区分两类常见证书更新操作:

操作是否更换私钥典型用途
renew仅续签证书,保持原密钥对
rekey轮换到新的公私钥对

两者都遵循同一状态切换规则:

  1. active_signing 证书降级为 verify_only
  2. 新证书成为新的 active_signing
  3. 验签方仍可使用旧证书验证其活跃期内产生的历史签名

状态切换的实现位置

该规则必须由三层共同保证:

  1. 证书数据库/状态存储:记录证书状态与替换关系
  2. 持钥组件(如 Auth / Issuer CA / Registry CA / Agent runtime):签名前只允许使用 active_signing
  3. 验签组件:验证签名时额外检查签名时间是否落在证书的活跃签名窗口内

仅依赖数据库记录状态是不够的;若验签方不执行时序校验,旧证书在密码学上仍可继续生成可通过的签名。

椭圆曲线选择

证书类型推荐曲线安全强度签名哈希签发者
Root CAP-384192 bitSHA-384自签名
Registry CAP-384192 bitSHA-384Root CA
Issuer CA (aid.pub)P-384192 bitSHA-384Registry CA
内置服务 (auth/msg/group)P-384192 bitSHA-384Issuer CA
终端用户(默认)P-256128 bitSHA-256Issuer CA
终端用户(可选)P-384192 bitSHA-384Issuer CA
终端用户(可选)Ed25519128 bit— (EdDSA)Issuer CA
终端用户(可选)SM2128 bitSM3Issuer CA

Issuer CA 职责与部署

Issuer CA 职责由 Auth 服务代行

在 AUN 架构中,Issuer CA 的所有职责(证书签发、验证、管理)都由 Auth 服务统一负责:

  • 证书签发:Auth 服务持有 Issuer CA 私钥,负责签发所有 Agent 证书
  • 证书验证:验证客户端提交的证书链,确认证书有效性
  • 证书续期:处理 auth.renew_cert 请求,签发续期证书
  • 证书轮换:处理 auth.rekey 请求,签发新密钥对应的证书
  • JWT 签发:用 Auth 服务自身的证书私钥签发 JWT token

Issuer CA 证书申请

Issuer CA 证书由 Registry CA(在线服务)签发。Registry CA 是 Root CA 签发的中间 CA,专门负责 Issuer CA 的在线自动化签发。申请流程包括域名所有权验证(.well-known 文件验证)、泛域名解析验证等步骤,全程自动化,无需离线操作。详细的申请流程、安全要求和操作规范请参考:Issuer CA 证书申请流程

部署安全要求

为保护 Issuer CA 私钥安全,Auth 服务必须部署在受保护的网络环境中:

部署架构:

Internet

Gateway (公网可访问)
   ↓ (内网通信)
Auth 服务 (仅监听内网地址,如 127.0.0.1 或内网 IP)

Issuer CA 私钥 (HSM 或加密存储)

安全措施

  1. 网络隔离

    • Auth 服务仅监听内网地址(如 127.0.0.1:808010.0.0.10:8080
    • 普通 AID 无法直接访问 Auth 服务
    • 仅 Gateway 可通过内网访问 Auth 服务
  2. 访问控制

    • Gateway 作为推荐的接入方式,转发客户端的 auth.* 请求
    • 防火墙规则限制只有 Gateway 可访问 Auth 服务端口
    • 可选:Gateway 与 Auth 服务间使用 mTLS 双向认证
    • 注:Agent 也可选择 peer 直连或 relay 中继模式(详见 Gateway 连接模式服务协议
  3. 密钥保护

    • Issuer CA 私钥存储在 HSM(硬件安全模块)中
    • 或使用加密存储 + 严格的访问控制
    • 定期审计密钥使用日志

Root CA (P-384) 设计原则

  • 零信任架构:客户端必须能够独立验证 Auth 服务证书链到 Root CA,不依赖 Gateway
  • 全平台兼容:P-384 在所有平台完全支持(浏览器、iOS、Android 全版本)
  • 足够安全:192 bit 安全强度满足长期需求(NIST 推荐到 2030 年后)
  • 性能优势:比 P-521 快,客户端验证体验更好

终端证书曲线选择建议

重要说明

  • 创建 AID 时固定使用 P-256auth.create_aid 只能创建 P-256 证书,不可选择其他曲线

  • 额外曲线通过后续申请:认证后可通过 auth.request_cert 申请 P-384/Ed25519/SM2 等额外曲线证书

  • P-256 是全网互通基础:所有 Agent 必须持有 P-256 证书,保证任意两个 Agent 都能建立 E2EE

  • P-256(必需,创建 AID 时默认)

    • ✅ 全平台零依赖支持(浏览器、移动端、桌面端)
    • ✅ Web Crypto API 最佳支持
    • ✅ 性能最优(Go 汇编优化,比 P-384 快 6-8x)
    • ✅ 128 位安全强度,满足大多数应用需求
    • ⚠️ 仅能与同为 P-256 的用户建立 E2EE(ECDH)
  • P-384(可选)

    • ✅ 192 位安全强度,适合金融、政务等高安全场景
    • ✅ 全平台支持
    • ⚠️ 性能比 P-256 慢
    • ⚠️ 仅能与同为 P-384 的用户建立 E2EE(ECDH)
  • Ed25519(可选,非浏览器客户端)

    • ✅ 签名/验签性能远超 P-256(快 5-10x),适合 IoT/嵌入式等资源受限场景
    • ✅ 确定性签名(无需随机数),天然抗侧信道攻击,消除 ECDSA 的 k 值泄露风险
    • ✅ 128 位安全强度,与 P-256 同级
    • ✅ Go/Rust/Python/Java/Swift/Kotlin 原生支持
    • ✅ X.509 标准支持(RFC 8410, 2018)
    • ⚠️ 浏览器不支持:Web Crypto API 尚未支持 Ed25519,浏览器客户端不可用
    • ⚠️ E2EE 密钥交换需使用 X25519(同一曲线族 Curve25519,密钥可数学转换)
    • ⚠️ 签名算法为 EdDSA(非 ECDSA),验证方需支持 EdDSA
  • SM2(可选,国密合规场景)

    • ✅ 128 位安全强度,与 P-256 同级
    • ✅ 中国商用密码标准(GM/T 0003-2012)
    • ✅ Go/Java/Python/C/C++ 等服务端语言支持良好
    • ⚠️ 浏览器不支持:Web Crypto API 无国密支持
    • ⚠️ 性能比 P-256 慢约 2-3x(无硬件加速)
    • ⚠️ 仅能与同为 SM2 的用户建立 E2EE
    • ⚠️ 需国密 CA 签发证书(如 CFCA),证书格式遵循 GMT 0015-2012
    • ⚠️ 仅在中国境内合规要求场景使用
  • 多曲线模式(可选)

    • 同一 AID 可持有多曲线证书(如 P-256 + Ed25519 或 P-256 + SM2),通过 auth.request_cert 申请额外曲线
    • 与不同曲线的用户通信时自动选择匹配的证书
    • ⚠️ 需管理多套密钥和证书
    • ⚠️ 浏览器仅支持 P-256

各客户端提供的选项

客户端P-256P-384Ed25519SM2多曲线
浏览器✅ 唯一
移动端 App✅ 默认✅ 可选✅ 可选✅ 可选✅ 可选
桌面端 App✅ 默认✅ 可选✅ 可选✅ 可选✅ 可选
Go/Rust SDK✅ 默认✅ 可选✅ 可选✅ 可选✅ 可选
Python/Node SDK✅ 默认✅ 可选✅ 可选✅ 可选✅ 可选
IoT/嵌入式✅ 可选✅ 推荐✅ 可选

各曲线/算法兼容性详表

平台/运行时P-256 (ECDSA)P-384 (ECDSA)Ed25519 (EdDSA)X25519 (ECDH)SM2备注
浏览器 Web Crypto APIEd25519 在 W3C 草案中,Chrome 实验性支持
Node.js (crypto)✅ (v12+)✅ (v12+)⚠️基于 OpenSSL,需第三方库 sm-crypto
Go (crypto/*)✅ 汇编优化✅ (crypto/ed25519)✅ (crypto/ecdh)标准库原生支持,国密需 tjfoc/gmsm
Rust (ring/rustls)ring 库原生支持,国密需 libsm
Python (cryptography)✅ (v2.6+)✅ (v2.6+)基于 OpenSSL,国密需 gmssl/pysmx
Java (JDK)✅ (JDK 15+)✅ (JDK 11+)JDK 15 前需 BouncyCastle,国密需 BC 1.68+
Swift (CryptoKit)✅ (iOS 13+)✅ (iOS 13+)⚠️Apple CryptoKit 原生,国密需第三方 GMObjC
Kotlin/Android✅ (API 33+)✅ (API 33+)低版本需 BouncyCastle/Tink,国密需 BC
OpenSSL✅ (1.1.1+)✅ (1.1.1+)大多数服务端基础设施,国密需 1.1.1+ 或 GmSSL
X.509 证书✅ RFC 5480✅ RFC 5480✅ RFC 8410N/AEd25519 证书需较新的解析库,SM2 需 GMT 0015-2012
TLS 1.3✅ (RFC 8446)主流 TLS 库均支持,SM2 需 GMSSL/TLCP

国密算法支持(可选)

AUN 协议可选支持中国商用密码算法(国密),用于满足特定合规要求。国密算法不是默认选项,仅在明确需要时启用。

算法类型对应国际算法说明
SM2非对称加密/签名P-256 (ECDSA)256 bit 椭圆曲线,基于 SM2 曲线(非 NIST 曲线)
SM3哈希SHA-256256 bit 输出,用于 SM2 签名的哈希
SM4对称加密AES-128128 bit 分组密码,支持 GCM/CBC 等模式
SM9基于身份的密码标识密码算法,AUN 暂不支持

各语言/平台国密支持情况

语言/平台SM2SM3SM4推荐库生产可用
Gogithub.com/tjfoc/gmsm
JavaBouncyCastle 1.68+
Kotlin/AndroidBouncyCastle
Pythongmssl / pysmx
Rustlibsm
C/C++GmSSL / OpenSSL 1.1.1+
C#/.NETBouncyCastle.Crypto
Swift/iOS⚠️⚠️⚠️GMObjC (第三方)⚠️
Node.js⚠️⚠️⚠️sm-crypto (纯 JS,性能差)⚠️
浏览器Web Crypto API 不支持

使用建议

  1. 默认不启用:国密算法不是 AUN 的默认选项,仅在以下场景启用:

    • 中国境内部署,需满足《商用密码应用安全性评估》要求
    • 政务、金融等强制要求使用国密的行业
    • 与已有国密系统对接
  2. 性能考虑

    • SM2 签名/验签比 P-256 慢约 2-3x(无硬件加速)
    • SM4 比 AES 慢(AES 有 AES-NI 硬件加速,SM4 通常没有)
    • 建议仅服务端和原生 App 支持,浏览器客户端不支持
  3. 证书要求

    • SM2 证书需由国密 CA 签发(如 CFCA)
    • 证书格式遵循 GMT 0015-2012 标准
    • Root CA 需在国密受信列表中
  4. E2EE 支持

    • 曲线:SM2(密钥交换类似 ECDH)
    • 对称加密:SM4-GCM(128 bit 密钥,12 bytes nonce,16 bytes tag)
    • 协商时标识:supported_curves: ["SM2"], supported_ciphers: ["SM4-GCM"]
  5. 互操作性

    • SM2 用户只能与 SM2 用户建立 E2EE(曲线不兼容)
    • SM2 用户可与 P-256/P-384/Ed25519 用户普通通信(仅身份验证,不可 E2EE)
    • 建议国密用户同时持有 P-256 证书(多曲线模式),以便与国际用户互通
  6. 合规性

    • 商用密码产品需通过国家密码管理局认证
    • 密钥需存储在国密硬件(如国密 USB Key、国密 HSM)
    • 需遵循 GM/T 系列标准

多曲线共存与互操作性

AUN 网络中可能存在多种曲线的证书(P-256、P-384、Ed25519),它们的互操作性如下:

功能不同曲线之间说明
身份验证✅ 支持证书链验证不依赖曲线类型,验证方只需支持对应的签名算法(ECDSA 或 EdDSA)
消息签名验证✅ 支持标准签名验证,任意曲线间可验证(ECDSA 验 ECDSA,EdDSA 验 EdDSA)
E2EE 密钥交换⚠️ 有限支持ECDH 要求相同曲线族,E2EE 双方必须使用相同的曲线(P-256↔P-256、P-384↔P-384、X25519↔X25519)。持有多曲线证书的用户可自动匹配对方曲线

信任模型与共识机制

AUN 的信任建立基于 证书链验证,而非中心化授权。

证书链验证流程

验证步骤

  1. 客户端预装受信根证书列表(包含一个或多个 Root CA 公钥证书)
  2. 收到 Agent 证书(如 alice.aid.pub
  3. 从 Agent 证书的 AIA 扩展提取 Issuer CA URL
  4. 下载 Issuer CA 证书(aid.pub)及其上级 Registry CA 证书并缓存
  5. 验证签名链:
    • aid.pub 公钥验证 alice.aid.pub 证书签名 ✓
    • 用 Registry CA 公钥验证 aid.pub 证书签名 ✓
    • 用 Root CA 公钥验证 Registry CA 证书签名 ✓
  6. 检查证书有效期(必需)、吊销状态(推荐,CRL/OCSP,见 2.5 节)
  7. 验证 pathlen 约束(Issuer CA pathlen=0,Registry CA pathlen=1)
  8. 验证通过,信任该 AID

共识场景

场景 1:同 Auth 服务内的 AID(相同 Issuer CA)

alice.aid.pub ↔ bob.aid.pub
     ↓               ↓
   aid.pub ← Registry CA ← Root CA(相同)
  • 两个 AID 由同一个 Issuer CA(aid.pub)签发
  • 证书链完全相同:都追溯到同一个 Registry CA 和 Root CA
  • 共识机制:双方验证对方证书链到 Root CA 即可信任
  • 性能最优:Issuer CA 和 Registry CA 证书已缓存,无需重复下载

场景 2:跨 Auth 服务的 AID(不同 Issuer CA,相同 Root CA)

alice.aid.pub ↔ bob.company.com
     ↓                 ↓
  aid.pub          company.com
     ↓                 ↓
  Registry CA A(相同 Root CA 签发)

  Root CA
  • 两个 AID 由不同 Issuer CA 签发(aid.pub vs company.com
  • 但都追溯到同一个 Root CA(可能经由相同或不同的 Registry CA)
  • 共识机制:双方各自验证对方证书链到 Root CA
    • Alice 验证:bob.company.comcompany.com ← Registry CA ← Root CA ✓
    • Bob 验证:alice.aid.pubaid.pub ← Registry CA ← Root CA ✓
  • 关键:双方的 Root CA 都在受信列表中是信任的基础
  • 首次通信:需下载对方的 Issuer CA 和 Registry CA 证书

场景 3:跨 Root CA 的 AID(不同 Root CA,均在受信列表中)

alice.aid.pub ↔ bob.other.net
     ↓                 ↓
  aid.pub          other.net
     ↓                 ↓
Registry CA A    Registry CA B
     ↓                 ↓
  Root CA A ←互信→ Root CA B
     ↑                 ↑
     └── AUN 受信根证书列表 ──┘
  • 两个 AID 追溯到不同的 Root CA
  • 但两个 Root CA 均在 AUN 受信根证书列表
  • 可以互通:客户端内置多个受信根证书,验证对方证书链时只要追溯到列表中任一根证书即可
    • Alice 验证:bob.other.netother.net ← Root CA B(在受信列表中)✓
    • Bob 验证:alice.aid.pubaid.pub ← Root CA A(在受信列表中)✓
  • 关键:受信根证书列表中的所有 Root CA 彼此互信,形成统一的 AUN 公共网络

场景 4:私有 Root CA(私有 AUN 网络)

alice.aid.pub (Root CA A, 受信) ✗ charlie.private.org (Root CA P, 未受信)
  • Root CA P 不在 AUN 受信根证书列表中
  • Root CA P 签发的 AID 只能在其私有 AUN 网络内通信
  • 无法与公共 AUN 网络互通:公共网络客户端的受信列表中没有 Root CA P,证书链验证失败
  • 私有网络内部正常工作:私有网络的客户端只需内置 Root CA P 即可互通
  • 升级路径:私有 Root CA 可向 AUN 根证书管理局申请加入受信列表,审批通过后即可与公共网络互通(见 2.2 节)

共识达成的技术基础

  1. 受信根证书列表:所有 AUN 客户端内置受信根证书列表(包含一个或多个 Root CA 公钥)
  2. 证书链验证:通过密码学验证证书签名链的完整性,追溯到列表中任一 Root CA 即可
  3. AIA 扩展:证书包含 Authority Information Access 扩展,指向签发者证书的下载地址
  4. 自动获取:客户端自动下载并缓存中间证书(Issuer CA)
  5. 离线验证:证书链验证完全离线完成(除首次下载中间证书和列表更新)

关键特性

  • 去中心化信任:信任源于受信根证书列表,而非某个中心服务器
  • 可扩展:任何组织都可以申请成为 Issuer,签发自己的 AID
  • 多根互信:受信列表中的不同 Root CA 签发的 AID 可互通
  • 跨域互通:不同 Issuer 的 AID 可互通(只要 Root CA 在受信列表中)
  • 私有网络:未加入受信列表的 Root CA 可独立运行私有 AUN 网络
  • 升级路径:私有网络可申请加入公共网络,无需重新签发证书
  • ⚠️ Root CA 安全至关重要:任一受信 Root CA 私钥泄露将影响其签发的所有证书

证书吊销机制

证书签发后可能因私钥泄露、身份变更或违规行为需要提前作废。AUN 支持两种互补的吊销检查机制。

吊销权限层级

AUN 证书体系中,吊销权限遵循签发权限:

吊销者可吊销的证书吊销方式说明
根证书管理局Root CA 证书更新受信根证书列表从受信列表中移除该 Root CA,其签发的所有证书链自动失效
Root CAIssuer CA 证书 + 该 Root CA 下所有 Agent 证书CRL + OCSPRoot CA 可吊销其直接签发的 Issuer CA,也可吊销任何下级 Agent 证书
Issuer CAAgent 证书(该 Issuer 下)CRL + OCSPIssuer CA 只能吊销其直接签发的 Agent 证书

重要说明

  • 证书吊销操作不通过 AUN 协议完成,而是通过 CA 运营商的管理系统(通常是 Web 管理界面或专用 API)
  • AUN 协议只负责查询和验证吊销状态(通过 CRL/OCSP)
  • 吊销申请通常需要身份验证(如证书持有者的私钥签名、管理员凭证等)

吊销流程示例

Agent 证书吊销流程

证书持有者/管理员

  │ 1. 登录 Issuer CA 管理系统
  │ 2. 提交吊销申请(需身份验证)
  │    - 原因:私钥泄露/身份变更/违规等
  │    - 证明:私钥签名或管理员授权

Issuer CA 管理系统

  │ 3. 验证申请者身份
  │ 4. 将证书序列号加入吊销数据库
  │ 5. 更新 CRL(定期发布,如每小时)
  │ 6. 更新 OCSP Responder 数据

客户端验证时

  │ 7. 下载最新 CRL 或查询 OCSP
  │ 8. 检查证书序列号是否在吊销列表中
  └─ 如已吊销 → 拒绝连接

Issuer CA 证书吊销流程

Root CA 操作员

  │ 1. 在离线 Root CA 环境中操作
  │ 2. 多人授权(如 3/5 多签)
  │ 3. 将 Issuer CA 证书序列号加入 Root CA 的 CRL
  │ 4. 签名并发布 CRL

所有客户端

  │ 5. 下载 Root CA 的 CRL
  │ 6. 验证证书链时检查 Issuer CA 是否被吊销
  └─ 如已吊销 → 该 Issuer 下所有 Agent 证书链验证失败

Root CA 证书吊销流程

根证书管理局

  │ 1. 多人授权决策
  │ 2. 从受信根证书列表中移除该 Root CA
  │ 3. 签名并发布新的受信列表

所有客户端

  │ 4. 更新受信根证书列表
  │ 5. 该 Root CA 签发的所有证书链验证失败
  └─ 拒绝连接

CRL(Certificate Revocation List,证书吊销列表)

由签发者(Issuer CA 或 Root CA)定期发布的已吊销证书序列号列表,经签发者私钥签名。

工作流程

Issuer CA/Root CA 定期发布 CRL(签名的吊销列表)

    └─ 客户端下载 CRL → 缓存到本地

                          └─ 验证对方证书时,检查序列号是否在 CRL 中
                               ├── 不在列表中 → 证书有效
                               └── 在列表中 → 证书已吊销,拒绝连接

特性

项目说明
发布者Issuer CA(Agent 证书 CRL)或 Root CA(Issuer CA 证书 CRL)
发布频率建议每 1-6 小时更新一次
分发方式证书的 CRL Distribution Points 扩展指向下载 URL
签名签发者私钥签名,防止篡改
缓存客户端本地缓存,按 nextUpdate 字段判断是否过期
优点离线验证、实现简单、批量查询高效
缺点存在时间窗口(吊销后到下次发布之间,客户端可能仍认为有效)

OCSP(Online Certificate Status Protocol,在线证书状态协议)

实时查询单张证书的吊销状态,由 OCSP Responder 提供服务。

工作流程

客户端 ──请求──→ OCSP Responder(Issuer CA 运营)
  │                    │
  │                    └─ 查询证书状态,签名响应

  └─ 收到响应
       ├── status: good → 证书有效
       ├── status: revoked → 证书已吊销,拒绝连接
       └── status: unknown → 按策略处理(建议拒绝)

特性

项目说明
服务方Issuer CA 或 Root CA 运营的 OCSP Responder
查询方式证书的 Authority Information Access (AIA) 扩展指向 OCSP URL
实时性接近实时(取决于 Responder 的数据更新频率)
签名Responder 私钥签名(可由 CA 委托专用签名证书)
优点实时性好、响应体积小、无需下载完整列表
缺点依赖网络可达性、增加连接延迟、Responder 可能成为单点故障

OCSP Stapling(OCSP 装订)

为解决 OCSP 的延迟和隐私问题,AUN 推荐使用 OCSP Stapling:

Agent 服务端 ──定期请求──→ OCSP Responder
  │                           │
  │                           └─ 返回签名的 OCSP 响应

  └─ 将 OCSP 响应缓存,在 TLS 握手时附带发送给客户端

       客户端验证 OCSP 响应签名 → 无需自己联系 Responder
  • 服务端预取 OCSP 响应并缓存(有效期内复用)
  • TLS 握手时通过 status_request 扩展将响应"装订"在证书旁
  • 客户端无需额外网络请求,既降低延迟又保护隐私(Responder 不知道谁在查询谁)

AUN 推荐的吊销策略

层级推荐机制理由
Root CA 吊销更新受信根证书列表(2.2 节)Root CA 数量少,由管理局集中管理
Issuer CA 吊销CRL(由 Root CA 发布)中间 CA 数量有限,CRL 体积可控
Agent 证书吊销OCSP Stapling + CRL 兜底(由 Issuer CA 发布)Agent 数量大,OCSP 实时性好;CRL 作为离线兜底

客户端验证顺序

  1. 检查证书是否在本地 CRL 缓存中(快速、离线)
  2. 如有 OCSP Stapling 响应,验证其签名和时效性
  3. 如无 Stapling 且 CRL 已过期,尝试在线 OCSP 查询
  4. 如 OCSP 不可达,按本地策略决定(严格模式拒绝,宽松模式允许但记录告警)

吊销申请的身份验证

为防止恶意吊销攻击,CA 管理系统必须验证吊销申请者的身份:

方法 1:私钥签名验证

申请者用证书对应的私钥签名吊销请求
→ CA 验证签名 → 确认是证书持有者本人

方法 2:管理员授权

组织管理员登录 CA 管理系统
→ 提供管理员凭证(密码/2FA)
→ 吊销该组织下的证书

方法 3:应急吊销

私钥已泄露,无法签名
→ 通过预留的恢复邮箱/电话验证身份
→ 人工审核后吊销

AUN Protocol Documentation