2. Sigstore 核心组件:Cosign 签名工具、Fulcio 证书颁发机构、Rekor 透明日志、OIDC 身份认证

Sigstore 是一个用于对软件制品进行签名和验证的标准化服务,旨在消除传统密钥管理的复杂性。其架构由四个核心组件协同工作,形成一个完整的、可审计的供应链安全闭环。理解这四个组件及其交互关系,是构建策略即代码回滚护栏的基础。

核心概念: Sigstore 通过将短生命周期证书与透明日志相结合,实现了“无密钥”签名体验。开发者无需管理长期私钥,而是通过 OIDC 身份临时获取签名凭证。

2.1 四组件架构总览

下图展示了 Sigstore 四个核心组件在签名与验证流程中的位置与协作关系。开发者通过 OIDC 获取身份,向 Fulcio 申请证书,使用 Cosign 签名并上传至 Rekor,最终验证者通过 Rekor 和 Fulcio 公钥进行校验。

Sigstore 核心组件协作架构图 身份与凭证层 签名与证书层 透明与审计层 验证与策略层 OIDC 身份认证 Fulcio CA Cosign 签名工具 Rekor 透明日志 验证策略 获取 签发证书 上传签名 查询日志 容器镜像 / 包 签名 流程说明: 1. 开发者通过 OIDC 提供商(如 GitHub、Google)进行身份认证,获取身份 。 2. 将 提交给 Fulcio,Fulcio 验证后签发一个短生命周期(通常 10 分钟)的 X.509 证书。 3. 使用 Cosign 利用该证书对制品(如容器镜像)进行签名,并将签名和证书一并上传至 Rekor。 4. 验证者从 Rekor 查询签名记录,使用 Fulcio 的根证书验证签名有效性,完成信任链闭环。

2.2 组件详解与职责

每个组件在 Sigstore 生态中承担着不可替代的角色。下表从功能、输入输出、安全特性三个维度进行对比。

组件 核心功能 输入 / 输出 安全特性
Cosign 容器镜像及制品的签名、验证、存储 输入:镜像、私钥/证书;输出:签名文件(.sig)、证书 支持密钥对与密钥less模式;集成于 CI/CD 管道
Fulcio 基于 OIDC 的短期 X.509 证书颁发 输入:OIDC ;输出:签名证书(有效期短) 证书绑定身份;自动吊销;减少私钥泄露风险
Rekor 不可篡改的透明日志与审计追踪 输入:签名元数据;输出:日志条目、Merkle 树证明 防篡改;公开可审计;支持离线验证
OIDC 提供去中心化身份认证 输入:身份凭证;输出:JWT 联邦身份;无需管理长期密钥;支持多提供商

2.3 Cosign 签名工具

Cosign 是 Sigstore 的命令行工具,负责执行实际的签名与验证操作。它支持两种主要模式:传统密钥对模式和基于 OIDC 的密钥less 模式。在回滚护栏场景中,密钥less 模式是首选,因为它消除了密钥管理的运维负担。

运维建议: 在 CI/CD 管道中集成 Cosign 时,优先使用 cosign sign 命令配合环境变量 COSIGN_EXPERIMENTAL=1 启用密钥less 模式。该模式会自动调用 Fulcio 和 Rekor,无需手动管理私钥。

Cosign 的核心操作命令示例:

# 密钥less 模式签名(推荐)
COSIGN_EXPERIMENTAL=1 cosign sign <registry>/<image>:<tag>

# 验证签名
cosign verify --certificate-identity <email> --certificate-oidc-issuer <issuer> <registry>/<image>:<tag>

# 使用传统密钥对签名
cosign generate-key-pair
cosign sign --key cosign.key <registry>/<image>:<tag>

2.4 Fulcio 证书颁发机构

Fulcio 是一个专为软件供应链设计的证书颁发机构(CA)。它不要求用户提供 CSR 或长期身份证明,而是通过验证 OIDC 来颁发证书。这些证书具有以下关键属性:

  • 短生命周期: 默认有效期为 10 分钟,大幅降低证书泄露风险。
  • 身份绑定: 证书主体(Subject)直接映射到 OIDC 身份(如 email 或 CI 工作流 ID)。
  • 自动吊销: 通过 Rekor 日志和 CRL(证书吊销列表)实现快速失效。

Fulcio 的证书链结构如下:

Fulcio Root CA (自签名)
└── Fulcio Intermediate CA
    └── 用户签名证书 (有效期 10 分钟)
        ├── Subject: <OIDC 身份>
        ├── Issuer: Fulcio Intermediate
        └── 扩展: OIDC Issuer URL

2.5 Rekor 透明日志

Rekor 提供了一个不可篡改的、公开可审计的透明日志,用于记录所有签名事件。它基于 Merkle 树数据结构,确保一旦条目被写入,就无法被删除或修改。Rekor 在回滚护栏中的核心价值在于:

  • 审计溯源: 任何签名操作都会留下永久记录,便于事后审计。
  • 防抵赖: 签名者无法否认其签名行为。
  • 离线验证: 验证者可以下载 Merkle 树根哈希,在离线环境下验证签名是否被记录。
注意: Rekor 日志是公开的。虽然签名内容本身不包含敏感数据,但元数据(如镜像名称、签名时间)可能暴露内部项目信息。在私有环境中,建议部署私有 Rekor 实例或使用访问控制策略。

2.6 OIDC 身份认证

OIDC(OpenID Connect)是 Sigstore 身份层的基石。它允许开发者使用现有的身份提供商(如 GitHub、Google、Microsoft)进行认证,无需创建新的账户或管理密钥。Sigstore 支持的 OIDC 提供商包括:

提供商 适用场景 身份标识示例
GitHub GitHub Actions CI/CD、个人开发者 https://github.com/login/oauth
Google Google Cloud Build、GKE 工作负载 https://accounts.google.com
Microsoft Azure DevOps、企业 AAD 环境 https://login.microsoftonline.com
GitLab GitLab CI/CD https://gitlab.com

OIDC 的工作流程在签名场景中表现为:

  1. CI/CD 管道或开发者客户端向 OIDC 提供商发起认证请求。
  2. 提供商返回一个 JWT ,其中包含身份信息(如 email、工作流 ID)。
  3. 该 被提交给 Fulcio,Fulcio 验证 的签名和有效期后,颁发签名证书。
  4. Cosign 使用该证书完成签名操作。

2.7 组件协同:签名与验证流程

为了更清晰地展示四个组件在签名和验证两个阶段的具体交互,下图拆分为两个独立流程。

签名阶段:组件交互时序 开发者/CI OIDC 提供商 Fulcio Cosign Rekor 1. 请求认证 2. JWT 3. 提交 4. 签名证书 5. 签名制品 6. 上传 签名阶段要点: • 开发者无需管理任何私钥,身份由 OIDC 提供商保障。 • Fulcio 证书有效期极短,即使泄露也影响有限。 • Rekor 记录所有签名事件,形成不可篡改的审计链。 验证阶段:组件交互时序 验证者/策略 Cosign Rekor Fulcio 根证书 制品 1. 验证请求 2. 查询 3. 签名+证书 4. 获取根证书 5. 证书链验证 6. 签名验证 7. 验证结果 验证阶段要点: • 验证者不直接与 OIDC 或 Fulcio 交互,仅依赖 Rekor 和 Fulcio 根证书。 • Rekor 提供签名存在的证明,Fulcio 根证书提供信任锚点。 • 验证结果可用于策略引擎(如 Trivy)决定是否允许部署或回滚。

2.8 组件在回滚护栏中的角色映射

在《Sigstore-Trivy 协同策略即代码回滚护栏》剧本中,每个 Sigstore 组件对应特定的护栏职责:

组件 回滚护栏职责 策略即代码映射
Cosign 确保回滚目标镜像的签名有效且未被篡改 cosign verify 作为策略检查点
Fulcio 验证签名者身份是否属于允许回滚的授权实体 策略中定义允许的 OIDC 身份列表
Rekor 提供回滚操作的审计证据,防止恶意回滚 策略要求回滚操作必须对应 Rekor 条目
OIDC 绑定回滚操作到具体人员或 CI 工作流 策略中引用 OIDC 身份作为授权因子
关键结论: Sigstore 四组件共同构建了一个从身份到签名的完整信任链。在回滚护栏场景中,这个信任链确保只有经过身份认证、签名有效且记录可审计的镜像才能被回滚,从而防止未经授权的回滚操作或恶意镜像的引入。