3. Sigstore全景:Cosign、Fulcio、Rekor、Certificate Transparency生态组件
Sigstore 是一套面向软件供应链的签名与验证框架,旨在解决“谁来签、怎么签、签完存在哪、如何验证”四个核心问题。它并非单一工具,而是由多个组件构成的开放生态。理解每个组件的职责与交互关系,是调优 OCI 分发集成的前提。
3.1 核心组件总览
Sigstore 生态包含四个关键组件,分别对应签名、证书、日志和透明性校验。下表列出各组件的定位与核心产出物:
| 组件 | 角色 | 核心产出物 | 与OCI分发的关系 |
|---|---|---|---|
| Cosign | 签名客户端 | 镜像签名、SBOM 签名、 attestation | 直接操作 OCI 制品,将签名附加到镜像仓库 |
| Fulcio | 证书颁发机构(CA) | 短期代码签名证书(X.509) | 为 Cosign 提供 OIDC 身份绑定的证书 |
| Rekor | 透明性日志 | 签名元数据的不可变记录(条目) | 存储签名与镜像摘要的映射关系 |
| Certificate Transparency (CT) | 证书日志 | Fulcio 签发证书的审计日志 | 确保 Fulcio 行为可审计,防止恶意签发 |
关键理解: Cosign 是“执行者”,Fulcio 是“身份担保人”,Rekor 是“公证人”,CT 是“监督者”。四者共同构成从身份到签名的完整信任链。
3.2 组件交互流程与信任链
一次完整的 Sigstore 签名流程涉及所有组件协同工作。下图展示了从开发者签名到验证者校验的端到端数据流:
流程说明: 开发者通过 Cosign 发起签名请求 → Cosign 向 Fulcio 申请短期证书(基于 OIDC 身份)→ Fulcio 将证书提交到 CT 日志 → Cosign 使用证书签名镜像,并将签名推送到 OCI 仓库,同时将签名元数据上传到 Rekor → 验证者从 OCI 仓库拉取镜像和签名,从 Rekor 查询日志,并可选择从 CT 日志校验证书有效性。
3.3 组件深度解析
3.3.1 Cosign:签名与验证的执行者
Cosign 是 Sigstore 的命令行工具和库,直接与 OCI 分发规范交互。它支持以下核心操作:
- 镜像签名: 使用私钥或 Fulcio 颁发的短期证书对容器镜像进行签名,签名作为 OCI 制品存储在镜像仓库中。
- 签名验证: 从仓库拉取签名,结合 Rekor 日志和公钥/证书进行验证。
- Attestation 管理: 支持生成和验证 SBOM、SLSA 等 in-toto attestation。
- 密钥管理: 支持本地密钥、KMS、硬件安全模块(HSM)等多种密钥后端。
调优注意: Cosign 默认将签名存储在
sha256-<digest>.sig 的 OCI 制品中。在 OCI 分发集成调优时,需关注签名存储的命名规范、仓库权限和并发写入性能。
3.3.2 Fulcio:基于 OIDC 的证书颁发机构
Fulcio 实现了“无密钥签名”的核心机制。它通过 OIDC 协议与身份提供商(如 GitHub、Google、Microsoft)集成,为开发者签发短期 X.509 证书。
| 特性 | 说明 | 调优影响 |
|---|---|---|
| 证书有效期 | 通常为 10 分钟 | 减少证书泄露风险,但要求签名流程必须快速完成 |
| 身份绑定 | 证书 Subject 包含 OIDC 身份信息(如 email) | 验证者可通过证书直接追溯签名者身份 |
| CT 集成 | 所有签发的证书必须提交到 CT 日志 | 增加证书签发的延迟,但提供透明性保证 |
| 部署模式 | 公共实例(sigstore.dev)或私有部署 | 私有部署需自行管理 OIDC 信任和 CT 日志 |
3.3.3 Rekor:不可变签名日志
Rekor 是一个基于 Merkle 树的透明性日志,用于存储签名元数据。每个日志条目包含签名、证书、镜像摘要和可选的自定义数据。
- 条目结构: 每个条目由
body(签名元数据)、integratedTime(提交时间)、logIndex(日志索引)组成。 - 查询方式: 支持按
logIndex、uuid、publicKey、email等字段查询。 - 验证能力: 验证者可通过 Rekor 的 Merkle 树证明(inclusion proof)确认签名在特定时间点存在。
性能考量: 公共 Rekor 实例(sigstore.dev)的日志写入可能存在延迟。在 CI/CD 流水线中,建议使用异步写入或配置超时重试策略,避免签名流程阻塞。
3.3.4 Certificate Transparency:证书审计层
CT 日志是 Fulcio 信任模型的基础。它确保所有由 Fulcio 签发的证书都被公开记录,防止 CA 被攻破后恶意签发证书而不被发现。
CT 在 Sigstore 中的角色:
- 强制提交: Fulcio 在签发证书后,必须将证书提交到 CT 日志并获得 Signed Certificate Timestamp (SCT)。
- 验证者校验: 验证者在验证签名时,可以选择校验证书是否包含有效的 SCT,确保证书已被 CT 日志记录。
- 审计能力: 任何人都可以监控 CT 日志,发现异常证书签发行为。
3.4 组件部署与集成模式
根据组织的安全需求和基础设施,Sigstore 组件可以采用不同的部署模式:
3.5 组件调优关键点
在 OCI 分发集成场景下,各组件的调优直接影响签名和验证的性能与可靠性:
| 组件 | 调优维度 | 推荐配置 | 影响 |
|---|---|---|---|
| Cosign | 签名并发数 | 根据镜像大小调整 --max-workers |
减少大规模镜像签名的时间 |
| Cosign | 密钥缓存 | 启用 --kms-cache 或本地密钥环 |
避免重复请求 KMS,降低延迟 |
| Fulcio | 证书缓存 | 配置证书缓存 TTL(建议 5 分钟) | 减少 OIDC 交互次数 |
| Rekor | 日志写入超时 | 设置 --timeout 30s |
避免签名流程因日志延迟而阻塞 |
| Rekor | 查询索引 | 启用 --enable-retrieve-api |
加速验证阶段的日志查询 |
| CT 日志 | 提交策略 | 异步提交,允许签名流程不等待 SCT | 提升签名速度,但降低即时验证能力 |
调优原则: 在保证安全性的前提下,通过缓存、超时控制和异步策略减少组件间的同步等待。对于私有部署,建议将 Rekor 和 Fulcio 部署在同一网络区域,降低网络延迟。
3.6 组件版本与兼容性
Sigstore 组件仍在快速迭代中。下表列出当前主流版本及关键兼容性信息:
| 组件 | 当前稳定版 | OCI 分发支持 | 备注 |
|---|---|---|---|
| Cosign | v2.2.x | 完整支持 OCI 1.1 | 推荐使用 v2.x,v1.x 已停止维护 |
| Fulcio | v1.6.x | 不直接操作 OCI | 需与 OIDC 提供商版本匹配 |
| Rekor | v1.3.x | 不直接操作 OCI | 支持 PostgreSQL 和 MySQL 后端 |
| CT 日志 | v1.0.x | 不直接操作 OCI | 通常与 Fulcio 一起部署 |
版本兼容性提示: 在集成调优前,务必确认 Cosign 版本与 OCI 仓库的 API 版本兼容。Cosign v2.x 要求 OCI 仓库支持 Referrers API(OCI 1.1),否则需使用
--registry-referrers-mode=oci-fallback 降级模式。