2. Sigstore 核心组件:Cosign、Fulcio、Rekor、Certificate Transparency Logs 的功能与交互流程

Sigstore 是一个用于软件签名和验证的标准化服务,旨在消除传统密钥管理的复杂性。其架构由四个核心组件构成:Cosign、Fulcio、Rekor 和 Certificate Transparency Logs (CT Logs)。这四个组件协同工作,形成一个完整的、可审计的签名与验证链路。

2.1 组件功能定义

组件 核心功能 在 Sigstore 中的角色
Cosign 容器镜像签名、验证和存储 客户端工具,负责发起签名请求、验证签名,并将签名数据推送到 OCI 仓库或 Rekor
Fulcio 短期证书颁发机构 (CA) 根据 OIDC 身份签发短期代码签名证书,绑定用户身份与公钥
Rekor 透明性账本 (Transparency Log) 不可篡改的签名元数据存储,提供全局可审计的签名时间戳和证据
CT Logs 证书透明性日志 记录 Fulcio 签发的所有证书,防止 CA 滥用或签发恶意证书
关键区别: Rekor 存储的是签名事件(签名、公钥、负载摘要),而 CT Logs 存储的是证书本身。两者共同构建了“签名 + 证书”的双重透明性。

2.2 组件交互流程(签名与验证)

Sigstore 的交互流程分为两个主要阶段:签名阶段 和 验证阶段。下图展示了完整的端到端交互。

Sigstore 核心组件交互流程 开发者/用户 Cosign (CLI) Fulcio (CA) Rekor (账本) CT Logs OCI Registry 1. 发起签名 2. 请求证书 (OIDC) 3. 记录证书 4. 返回证书 5. 提交签名元数据 6. 返回签名条目 (UUID) 7. 存储签名 验证者 8. 验证签名 Cosign (验证) 9. 查询签名条目 10. 验证证书链 说明:虚线箭头表示异步记录操作;实线箭头表示同步请求/响应。所有交互均基于 HTTPS 和标准 OCI 协议。

2.3 签名阶段详细步骤

  1. 发起签名: 开发者使用 cosign sign 命令对容器镜像或工件进行签名。
  2. 身份认证: Cosign 自动获取 OIDC (如 GitHub、Google、Microsoft 身份),并向 Fulcio 请求一个短期代码签名证书。
  3. 证书签发与记录: Fulcio 验证 OIDC 后,签发一个有效期通常为 10 分钟的 X.509 证书。同时,Fulcio 将该证书提交到 CT Logs 进行永久记录。
  4. 签名与存储: Cosign 使用 Fulcio 返回的私钥对工件摘要进行签名,并将签名结果(包含证书和签名数据)推送到 Rekor。Rekor 返回一个唯一的签名条目 UUID。
  5. 可选存储: Cosign 也可以将签名数据作为 OCI 制品存储在 OCI Registry 中,与镜像共存。

2.4 验证阶段详细步骤

  1. 触发验证: 验证者(如 CI/CD 系统、策略引擎)使用 cosign verify 命令验证工件。
  2. 获取签名数据: Cosign 从 OCI Registry 或 Rekor 中获取签名和证书。
  3. 证书链验证: Cosign 向 Fulcio 验证证书的签发链,确保证书由可信的 CA 签发且未过期。
  4. 透明性验证: Cosign 检查证书是否存在于 CT Logs 中,防止使用未记录的证书。
  5. 签名条目验证: Cosign 查询 Rekor,验证签名条目是否被正确记录,并比对工件摘要是否匹配。
  6. 输出结果: 验证通过后,Cosign 输出签名者的身份信息(如邮箱)和签名时间戳。
策略即代码集成点: 在验证阶段,策略引擎(如 Kyverno、OPA)可以调用 Cosign 的验证结果,并根据签名者身份、证书颁发者、签名时间等属性,决定是否允许部署。这是实现“资源配额模型漂移告警”中签名策略校验的基础。

2.5 组件交互关系总结

交互对 协议/接口 传输内容 安全要求
Cosign ↔ Fulcio HTTPS (gRPC) OIDC , 证书请求, 签名证书 mTLS 或 OAuth 2.0
Fulcio ↔ CT Logs HTTPS (REST) X.509 证书 或 JWT
Cosign ↔ Rekor HTTPS (REST) 签名负载, 公钥, 证书, 工件摘要 或匿名访问
Cosign ↔ OCI Registry OCI Distribution Spec 签名制品 (cosign.sig) Registry 认证
注意: 在生产环境中,Fulcio 和 Rekor 通常部署为公共服务(如 sigstore.dev),但企业也可以自建私有实例。自建时,需要额外配置 CT Logs 和 OIDC 提供商,并确保所有组件之间的网络通信加密。