3. Sigstore 项目全景:Cosign、Rekor、Fulcio 三大组件介绍与工作流程

Sigstore 是一个用于对软件制品进行签名和验证的开放标准,旨在消除传统密钥管理带来的复杂性。其核心由三个组件构成:Cosign(签名与验证工具)、Rekor(透明日志)和 Fulcio(证书颁发机构)。三者协同工作,为容器镜像等制品提供端到端的签名、记录和验证能力。

3.1 三大核心组件概述

组件 角色 核心功能 输出/产物
Cosign 签名与验证客户端 对容器镜像、blob 等进行签名、验证和存储签名 签名文件(.sig)、签名镜像标签
Rekor 透明日志与时间戳 记录签名元数据,提供不可篡改的审计追踪 日志条目、签名证书(Signed Entry Timestamp, SET)
Fulcio 证书颁发机构(CA) 基于 OIDC 身份签发短期代码签名证书 X.509 证书(有效期通常为 10 分钟)
关键设计理念: Sigstore 通过将签名与身份(OIDC)绑定,并利用 Rekor 透明日志公开记录所有签名事件,使得任何人都可以独立验证签名的有效性和时间点,无需预先信任签名者的公钥。

3.2 Sigstore 工作流程详解

Sigstore 的典型工作流程分为签名和验证两个阶段。以下流程图展示了从开发者签名到用户验证的完整链路。

Sigstore 签名与验证工作流程 签名阶段 开发者 OIDC Provider Fulcio CA 1. 身份认证 2. ID 3. 请求签名证书 4. 短期 X.509 证书 Cosign 签名 Rekor 日志 5. 提交签名元数据 6. 返回 SET 镜像仓库 7. 推送签名与镜像 验证阶段 验证者 Cosign 验证 Rekor 查询 8. 验证请求 9. 查询日志 10. 返回日志条目 验证结果 11. 返回验证结果 说明:验证者无需预先信任签名者的公钥,只需信任 Rekor 日志和 Fulcio 的根证书即可完成验证。

3.3 组件交互与关键步骤

  1. 身份认证(OIDC): 开发者使用支持 OIDC 的身份(如 Google、GitHub、Microsoft)向身份提供商进行认证,获取 ID 。
  2. 证书签发(Fulcio): Cosign 将 ID 发送给 Fulcio,Fulcio 验证 后签发一个短期有效的 X.509 代码签名证书。该证书将开发者的身份与公钥绑定。
  3. 签名(Cosign): 开发者使用 Fulcio 签发的证书及其私钥对容器镜像进行签名。Cosign 生成签名文件(.sig)和证书文件(.crt)。
  4. 日志记录(Rekor): Cosign 将签名元数据(包括证书、签名、镜像摘要等)提交到 Rekor 透明日志。Rekor 返回一个签名证书(SET),作为该条目已记录在日志中的凭证。
  5. 存储: 签名文件和证书通常与镜像一起推送到容器镜像仓库(如 Docker Hub、Harbor),或存储在 OCI 制品中。
  6. 验证: 验证者使用 Cosign 从镜像仓库拉取签名和证书,同时查询 Rekor 日志确认签名记录的存在性和时间戳。Cosign 验证证书链是否可追溯到 Fulcio 根证书,并检查签名是否匹配镜像内容。
安全收益: 通过 Rekor 透明日志,任何签名事件都是公开可审计的。即使签名者的私钥泄露,攻击者也无法为过去的镜像生成有效的 Rekor 条目,从而防止了历史签名被伪造。

3.4 组件对比与选型建议

特性 Cosign Rekor Fulcio
部署方式 CLI 工具,无需服务端 需部署服务端(公共实例或自托管) 需部署服务端(公共实例或自托管)
密钥管理 支持密钥对、KMS、硬件密钥 不管理密钥,仅记录元数据 不管理密钥,仅签发证书
网络依赖 签名时需访问 Fulcio 和 Rekor 需网络可达 需网络可达
离线场景 支持离线验证(需缓存证书链) 不支持离线查询 不支持离线签发
典型用途 CI/CD 流水线签名、本地验证 审计追踪、合规性证明 自动化证书签发
注意: 在生产环境中,建议使用 Sigstore 的公共实例(sigstore.dev)进行快速验证,或为内部环境部署自托管的 Rekor 和 Fulcio 实例以确保数据主权和可用性。