技术深度解析
pstoeckle/cosign-test 仓库建立在两项关键技术之上:Sigstore 和 Cosign。Sigstore 是一个非营利开源项目,提供公开、透明且可审计的软件制品签名与验证系统。Cosign 是其用于容器镜像签名、验证和存储的主要 CLI 工具。
架构与工作流:
该仓库展示的核心工作流非常直接:
1. 构建: 从 Dockerfile 构建 Docker 镜像(或从仓库拉取)。
2. 签名: Cosign CLI 使用无密钥签名方法对镜像摘要进行签名。这利用了 GitHub Actions 的 OpenID Connect(OIDC)令牌(需要 `id-token: write` 权限)。Cosign 将此令牌与 Sigstore 的 Fulcio 证书颁发机构交换,后者签发一个短期签名证书。签名和证书随后上传至 Sigstore 的 Rekor 透明度日志,创建公开可验证的记录。
3. 验证: 后续步骤或单独的工作流使用 Cosign 验证镜像的签名。验证过程检查证书链、证书中嵌入的身份(例如 GitHub 仓库和工作流名称)以及 Rekor 条目。
无密钥签名 vs. 传统密钥签名:
传统签名需要生成、存储和保护私钥——这对开发者来说是一个主要痛点。无密钥签名通过使用与 CI/CD 身份绑定的临时短期证书消除了这一痛点。这意味着:
- 无密钥管理开销。
- 无密钥泄露风险(密钥是临时的)。
- 自动撤销(证书快速过期)。
- 强大且可审计的身份绑定(签名者的身份就是 GitHub Actions 工作流运行)。
工程细节:
该仓库使用标准的 GitHub Actions YAML 文件。关键步骤包括:
- 设置权限:`id-token: write`(OIDC 令牌生成所需)。
- 安装 Cosign:通常通过 `cosign-installer` action 或简单的 `curl` 命令完成。
- 签名命令:`cosign sign --yes <IMAGE_URI>`(`--yes` 标志跳过确认提示)。
- 验证命令:`cosign verify --certificate-identity <EXPECTED_IDENTITY> --certificate-oidc-issuer https://token.actions.githubusercontent.com <IMAGE_URI>`。
相关开源仓库:
- sigstore/cosign(GitHub 星标:~4.5k):用于签名和验证制品的核心工具。支持 OCI 镜像、blob 等。近期更新包括对多架构镜像的改进支持以及增强的验证策略。
- sigstore/fulcio(GitHub 星标:~1.2k):基于 OIDC 令牌签发短期证书的证书颁发机构。
- sigstore/rekor(GitHub 星标:~1.1k):记录所有签名的透明度日志,实现公开可审计性。
- sigstore/gitsign(GitHub 星标:~1.0k):使用 Sigstore 对 Git 提交进行签名的相关工具。
性能与基准数据:
| 操作 | 时间(秒) | 备注 |
|---|---|---|
| OIDC 令牌生成 | < 1 | 在 GitHub Actions 中自动完成 |
| Cosign 安装 | 2-5 | 取决于网络和运行器 |
| Cosign 签名(无密钥) | 3-8 | 包括 Fulcio 证书签发和 Rekor 上传 |
| Cosign 验证 | 1-3 | 需要网络访问 Rekor |
数据要点: 签名和验证的开销极小(总计不到 10 秒),相比典型的构建时间(通常数分钟)微不足道。权衡之处在于构建时间略有增加,但换来了显著的安全增益。
关键参与者与案例研究
该生态系统的主要参与者是 Sigstore(开源项目)和 GitHub(CI/CD 平台)。pstoeckle/cosign-test 仓库是一个社区驱动的示例,但其底层技术得到了主要行业参与者的支持。
Sigstore:
- 创立者: Linux 基金会,初始贡献来自 Google、Red Hat 和普渡大学。
- 目标: 让软件签名变得普及且简单。
- 采用情况: Sigstore 已被 Kubernetes(用于签名发布制品)、Python(PyPI)和 npm(实验性)等主要项目采用。
- 资金支持: 由 OpenSSF(开源安全基金会)和个人捐赠支持。
GitHub:
- 角色: 提供 CI/CD 运行时(GitHub Actions)和 OIDC 身份提供商。
- 策略: GitHub 一直在大力推动供应链安全功能,包括 Dependabot、秘密扫描,以及现在与 Sigstore 的原生集成。他们有一个专门团队负责制品证明(artifact attestations)。
- 业绩记录: GitHub 的 Actions 平台已成为开源世界 CI/CD 的事实标准,每月运行超过 5000 万个工作流(截至 2024 年)。
签名解决方案对比:
| 特性 | Cosign(Sigstore) | Notary v2 | In-toto |
|---|---|---|---|
| 密钥管理 | 无密钥(OIDC) | 基于密钥 | 基于密钥 |
| 透明度日志 | Rekor(公开) | 可选 | 无 |
| 身份绑定 | CI/