2. Sigstore 核心概念:组件、软件供应链安全与签名验证

Sigstore 是一套用于对软件制品进行签名、验证和透明性审计的开源标准。它通过三个核心组件(Cosign、Rekor、Fulcio)解决了传统 PGP 签名在密钥管理、分发和撤销上的痛点,使容器镜像、二进制文件等制品的签名验证能够以无密钥(keyless)或短生命周期密钥的方式集成到 CI/CD 流水线中。

2.1 Sigstore 三大组件

组件 角色 核心能力 运维关注点
Cosign 签名与验证客户端 对容器镜像、blob、附件进行签名、验证和存储签名 签名策略配置、OCI 仓库权限、keyless 模式下的 OIDC 集成
Rekor 透明性日志 记录签名元数据到不可篡改的 Merkle 树,提供审计溯源 日志存储、检索 API、与内部审计系统的对接
Fulcio 证书颁发机构(CA) 基于 OIDC 身份签发短期 X.509 证书,绑定身份与公钥 OIDC 信任锚配置、证书有效期、吊销检查
关键区别:传统 PGP 签名依赖长期私钥,密钥泄露后难以撤销;Sigstore 通过 Fulcio 签发短生命周期证书(通常 10 分钟),结合 Rekor 透明日志,使签名验证不再依赖“信任 Web”,而是依赖“身份 + 日志”。

2.2 软件供应链安全与签名验证流程

Sigstore 的签名验证流程围绕“身份绑定”和“透明性审计”展开,典型流程如下:

  1. 身份认证:开发者通过 OIDC 提供者(如 GitHub、Google、GitLab)获取身份令牌。
  2. 证书签发:Fulcio 验证 OIDC 令牌后,签发短期 X.509 证书,证书中包含开发者身份信息(如 email)。
  3. 签名生成:Cosign 使用该证书对应的临时密钥对容器镜像摘要进行签名,生成签名载荷。
  4. 日志记录:签名载荷被提交到 Rekor 透明日志,获得唯一的 Merkle 树证据(UUID)。
  5. 签名存储:签名和证书被存储在 OCI 仓库的附件中(如 sha256-xxx.sig)。
  6. 验证阶段:验证者使用 Cosign 验证签名,Cosign 自动从 Rekor 查询日志条目,并检查证书是否由可信 Fulcio 签发、身份是否匹配策略。
Sigstore 签名验证流程 开发者 OIDC 提供者 Fulcio CA Rekor 日志 OCI 仓库(镜像+签名) 验证者(Cosign) 说明:验证者从 OCI 仓库拉取签名,从 Rekor 获取日志证据,并验证证书是否由可信 Fulcio 签发。

2.3 Cosign 签名与验证命令示例

以下命令展示了使用 Cosign 对容器镜像进行签名和验证的典型操作:

# 使用 keyless 模式对镜像签名(自动触发 OIDC 流程)
cosign sign --keyless <registry>/<image>:<tag>

# 使用本地密钥对签名
cosign sign --key cosign.key <registry>/<image>:<tag>

# 验证签名(keyless 模式自动查询 Rekor)
cosign verify --keyless <registry>/<image>:<tag>

# 验证签名并检查身份策略
cosign verify --keyless --cert-identity "developer@example.com" \
  --cert-oidc-issuer "https://accounts.google.com" \
  <registry>/<image>:<tag>
运维提示:在容器网络运维准入策略中,建议在验证阶段强制指定 --cert-identity 和 --cert-oidc-issuer,防止攻击者使用任意 OIDC 身份签名恶意镜像。

2.4 组件协作关系图

下图展示了 Sigstore 组件在容器网络运维场景下的协作关系,重点关注准入控制器如何与 Cosign、Rekor 和 Fulcio 交互:

Sigstore 组件协作:容器网络运维准入场景 K8s 准入控制器 Cosign 验证器 Rekor 日志 Fulcio CA OCI 仓库 策略引擎(OPA / Kyverno)— 根据验证结果决定准入/拒绝 说明:准入控制器调用 Cosign 验证签名,Cosign 从 Rekor 获取日志证据、从 Fulcio 获取证书链,最终策略引擎根据验证结果做出准入决策。

2.5 软件供应链安全的关键保障

  • 不可抵赖性:签名绑定到 OIDC 身份,Rekor 日志提供永久审计证据,开发者无法否认签名行为。
  • 无密钥风险:短期证书 + 透明日志消除了长期密钥泄露、丢失或轮换的运维负担。
  • 策略可编程:验证阶段可指定身份、签发者、证书策略,与 OPA/Kyverno 等策略引擎集成,实现细粒度准入控制。
  • 透明性审计:所有签名事件记录在 Rekor 中,安全团队可随时查询、回溯、分析异常签名行为。
风险提示:如果 Rekor 日志不可用或 Fulcio 证书链被篡改,签名验证将失败。在容器网络运维中,建议部署内部 Rekor 实例或配置可信的公共 Rekor 端点,并定期验证 Fulcio 根证书的完整性。