3. Sigstore 项目全景:Cosign、Rekor、Fulcio 三大组件及其在供应链安全中的角色

Sigstore 是一个专为软件供应链签名与验证设计的开源项目,旨在通过无密钥(Keyless)签名、透明日志和公共证书颁发机构,消除传统 PKI 和密钥管理的复杂性。其核心由三个独立但紧密协作的组件构成:Cosign(签名与验证工具)、Rekor(透明日志)和 Fulcio(证书颁发机构)。

核心设计理念: Sigstore 通过将签名操作与短期证书绑定,并将所有签名元数据记录在不可篡改的日志中,实现了“无需长期保管私钥”的供应链安全模型。任何验证者只需查询 Rekor 日志即可完成信任链追溯。

3.1 三大组件功能总览

组件 全称 核心职责 在供应链中的角色
Cosign Container Signing 镜像签名、验证、存储签名 执行者:对镜像/工件进行签名和验证,支持 Keyless 模式
Rekor Transparency Log 签名元数据的不可篡改日志 审计者:记录所有签名事件,提供可审计的透明性
Fulcio Certificate Authority 基于 OIDC 身份签发短期证书 信任锚:将用户身份(GitHub/GitLab/Google)绑定到签名密钥

3.2 Cosign:签名与验证的执行引擎

Cosign 是 Sigstore 的命令行工具和库,直接面向用户操作。它支持传统密钥对签名和 Keyless 签名两种模式。在 Keyless 模式下,Cosign 自动与 Fulcio 和 Rekor 交互,无需用户管理私钥。

  • 镜像签名: 将签名以 OCI 制品形式存储在镜像仓库中(如 cosign sign)。
  • 镜像验证: 从仓库拉取签名并验证其与 Rekor 日志中的条目是否一致(如 cosign verify)。
  • 附加元数据: 支持附加 SBOM、ATT(in-toto 证明)等元数据到镜像。
  • 策略控制: 通过 cosign verify-attestation 验证策略声明。
关键命令示例: Keyless 签名一条镜像
# 使用 Keyless 模式签名(自动获取 Fulcio 证书并记录到 Rekor)
cosign sign --keyless ghcr.io/myorg/myapp:v1.0.0

# 验证签名(自动查询 Rekor 日志和 Fulcio 证书链)
cosign verify --keyless ghcr.io/myorg/myapp:v1.0.0

3.3 Rekor:透明日志与审计中枢

Rekor 维护一个基于 Merkle 树的不可篡改日志,记录所有签名事件。每个签名操作都会生成一个唯一的 Rekor 条目,包含签名、证书、工件摘要等信息。验证者通过查询 Rekor 来确认签名是否在日志中,从而防止签名被隐藏或篡改。

  • 条目结构: 每个条目包含 body(签名元数据)、integratedTime(记录时间)、logIndex(日志索引)。
  • 搜索能力: 支持按哈希值、公钥、证书指纹等字段搜索条目。
  • 公共实例: Sigstore 社区维护公共 Rekor 实例(rekor.sigstore.dev),所有 Keyless 签名默认写入该实例。
  • 自托管: 企业可部署私有 Rekor 实例,用于内部审计和合规要求。
注意: Rekor 日志是公开可读的。如果镜像名称或标签包含敏感信息,建议在签名前对工件摘要进行哈希处理,或使用私有 Rekor 实例。

3.4 Fulcio:基于 OIDC 的证书颁发机构

Fulcio 是一个符合 Web PKI 标准的证书颁发机构(CA),它根据用户的 OIDC(OpenID Connect)身份签发短期 X.509 证书。证书的有效期通常为 10 分钟,过期后无法用于签名,从而降低了私钥泄露的风险。

  • 身份绑定: 支持 GitHub、GitLab、Google、Microsoft 等 OIDC 提供商。
  • 证书链: Fulcio 签发的证书链可追溯到 Sigstore 根 CA,验证者无需额外配置信任锚。
  • 无密钥模式: 用户无需生成或保管长期私钥;签名密钥对由 Cosign 临时生成,签名后立即丢弃。
  • 审计追溯: 证书中包含用户的 OIDC 身份信息(如邮箱),便于事后审计。

3.5 三大组件协作流程(Keyless 签名)

下图展示了 Sigstore 在 Keyless 模式下,Cosign、Fulcio、Rekor 三者如何协作完成一次镜像签名与验证的完整流程。

Sigstore Keyless 签名与验证流程 Sigstore Keyless 签名与验证流程 用户/CI 系统 Cosign Fulcio CA Rekor 日志 镜像仓库 验证者 ① 发起签名请求 ② 请求短期证书 ③ 返回签名证书 ④ 记录签名元数据 ⑤ 存储签名到仓库 ⑥ 拉取镜像与签名 ⑦ 查询 Rekor 日志验证条目 流程说明: ①-③:Cosign 通过 OIDC 身份向 Fulcio 获取短期证书;④-⑤:签名元数据写入 Rekor,签名制品存入镜像仓库;⑥-⑦:验证者拉取镜像和签名,并查询 Rekor 确认日志存在。

3.6 组件对比:传统 PKI vs Sigstore 无密钥模型

维度 传统 PKI 签名 Sigstore Keyless 签名
密钥管理 需要长期保管私钥,泄露风险高 临时密钥对,签名后丢弃,无保管负担
证书颁发 需要自建 CA 或购买商业证书 Fulcio 基于 OIDC 自动签发短期证书
审计追溯 依赖日志系统,可能被篡改 Rekor 透明日志,Merkle 树保证不可篡改
身份绑定 证书与域名/组织绑定 证书与个人 OIDC 身份(邮箱)绑定
验证复杂度 需要配置信任锚和 CRL 自动信任 Sigstore 根 CA,无需额外配置

3.7 在供应链安全中的角色总结

Sigstore 三大组件在供应链安全中分别承担了执行、审计和信任三个关键角色:

  • Cosign 是供应链安全的“执行者”,负责在 CI/CD 流水线中实际完成签名和验证操作,确保镜像在构建和部署环节的完整性。
  • Rekor 是供应链安全的“审计者”,提供全局透明日志,使任何签名事件都可被公开验证和追溯,防止恶意签名或事后抵赖。
  • Fulcio 是供应链安全的“信任锚”,通过 OIDC 身份将现实世界的用户身份与签名行为绑定,解决了“谁签的名”这一核心信任问题。
实践建议: 在多集群环境中,建议将 Sigstore 的公共实例作为默认配置,以降低运维成本。对于高安全等级场景(如金融、医疗),可部署私有 Rekor 和 Fulcio 实例,确保日志和证书链完全受控。同时,结合 Cosign 的策略引擎(如 cosign verify-attestation)实现细粒度的镜像准入控制。