3. 环境准备:安装 Cosign、配置 OpenID Connect、搭建本地 Rekor 实例
在深入调用 Sigstore 信任边界接口之前,必须搭建一套完整的本地实验环境。本章将指导你完成三个核心组件的部署:Cosign(签名/验证客户端)、OpenID Connect(身份代理层)和Rekor(透明性日志服务)。这套环境将作为后续所有接口调用的基础沙箱。
3.1 环境概览与组件关系
下图展示了本地实验环境中三个组件之间的调用关系与数据流。Cosign 作为 CLI 客户端,通过 OIDC 获取短期身份令牌,然后将签名元数据写入本地 Rekor 实例。
3.2 安装 Cosign
Cosign 是 Sigstore 生态中最常用的客户端工具,支持容器镜像、Blob 文件、记录等多种资产的签名与验证。推荐使用官方二进制安装方式,确保版本一致。
3.2.1 Linux / macOS 安装
# 下载最新稳定版(v2.4.0+)
curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64"
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
sudo chmod +x /usr/local/bin/cosign
# 验证安装
cosign version
3.2.2 macOS(Homebrew)
brew install cosign
3.2.3 验证安装结果
执行以下命令确认 Cosign 可以正常工作:
cosign version
# 输出示例(关键字段):
# ______ ______ ______ ______ ______ ______
# /_____/ /_____/ /_____/ /_____/ /_____/ /_____/
# v2.4.1 2024-11-15T14:30:00Z 9a8b7c6d5e4f3a2b1c0d
版本兼容提示:本课程所有接口调用示例基于 Cosign v2.4.x。如果使用更早版本(v1.x),部分命令参数(如
cosign sign 的 --oidc-issuer 选项)可能不同。建议统一使用 v2.4+。
3.3 配置 OpenID Connect
Sigstore 默认使用 OIDC 作为身份层,支持 GitHub、Google、Microsoft 等公有身份提供商。在本地实验环境中,我们配置 Cosign 使用 GitHub OIDC 进行身份认证。
3.3.1 获取 GitHub OIDC 令牌(交互式)
# Cosign 会自动打开浏览器引导 GitHub OAuth 流程
cosign sign --oidc-issuer "https://oauth2.sigstore.dev/auth/auth" \
--oidc-client-id "sigstore" \
<your-image>
3.3.2 使用环境变量预配置 OIDC
在自动化流水线中,可以通过环境变量注入 OIDC 令牌,避免交互式浏览器弹窗:
# 设置 OIDC 令牌环境变量
export COSIGN_OIDC_=<your-oidc-jwt->
# 使用环境变量进行签名(无需交互)
cosign sign --oidc-issuer "https://oauth2.sigstore.dev/auth/auth" \
<your-image>
3.3.3 OIDC 配置参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
--oidc-issuer |
https://oauth2.sigstore.dev/auth/auth |
OIDC 提供商地址,Sigstore 官方使用 sigstore.dev |
--oidc-client-id |
sigstore |
OIDC 客户端标识,用于识别 Sigstore 应用 |
--oidc-client-secret |
(可选) | 仅用于机密客户端流程,公有流程通常不需要 |
COSIGN_OIDC_ |
(环境变量) | 预置 JWT 令牌,跳过交互式浏览器流程 |
安全提醒:OIDC 令牌是短期凭证(通常 10-60 分钟有效)。不要将令牌硬编码在脚本或配置文件中。在 CI/CD 环境中,使用平台提供的 OIDC 令牌注入机制(如 GitHub Actions 的
id-: write 权限)。
3.4 搭建本地 Rekor 实例
Rekor 是 Sigstore 的透明性日志服务,负责记录所有签名事件。在本地搭建 Rekor 实例,可以避免依赖公有 Rekor 服务,同时方便调试和教学。
3.4.1 使用 Docker Compose 快速部署
推荐使用官方 Docker Compose 配置,一键启动 Rekor Server 及其依赖的 Trillian 日志后端和 MySQL 数据库:
# 克隆 Rekor 仓库
git clone https://github.com/sigstore/rekor.git
cd rekor
# 使用 Docker Compose 启动本地 Rekor 集群
docker-compose -f docker-compose.yml up -d
# 等待所有服务就绪(约 30 秒)
docker-compose ps
# 输出示例:
# Name Command State Ports
# -------------------------------------------------------------------------------------
# rekor-mysql docker-entrypoint.sh mysqld Up 3306/tcp
# rekor-server /rekor-server serve Up 0.0.0.0:3000->3000/tcp
# rekor-trillian-log /trillian_log_server ... Up 0.0.0.0:8090->8090/tcp
3.4.2 验证 Rekor 服务状态
# 检查 Rekor API 健康状态
curl -s http://localhost:3000/api/v1/log | jq .
# 预期返回(部分字段):
# {
# "rootHash": "a1b2c3d4e5f6...",
# "treeSize": 1,
# "signedTreeHead": "eyJ..."
# }
3.4.3 配置 Cosign 使用本地 Rekor
通过环境变量或命令行参数,让 Cosign 将签名记录写入本地 Rekor 实例:
# 方式一:环境变量(推荐)
export REKOR_HOST=http://localhost:3000
# 方式二:命令行参数
cosign sign --rekor-url http://localhost:3000 \
<your-image>
3.5 环境验证清单
完成上述安装后,执行以下验证步骤,确保所有组件正确联通:
- Cosign 可用性:
cosign version返回版本号且无报错。 - OIDC 令牌获取:
cosign sign --oidc-issuer "https://oauth2.sigstore.dev/auth/auth" --dry-run能够触发浏览器或返回令牌提示。 - Rekor 服务响应:
curl http://localhost:3000/api/v1/log返回 JSON 格式的日志状态。 - 端到端联通:使用 Cosign 对测试文件签名并上传到本地 Rekor:
echo "test" > test.txt && cosign sign-blob --rekor-url http://localhost:3000 test.txt。
验证成功标志:签名命令完成后,在 Rekor 中查询到对应的条目 UUID,且 Cosign 返回
Signature wrote to ... 和 Rekor entry created with index: ... 两条确认信息。
3.6 常见问题与排错
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
cosign: command not found |
Cosign 未安装或不在 PATH 中 | 确认 /usr/local/bin/cosign 存在且可执行 |
| OIDC 浏览器无法打开 | 无图形界面环境(如 SSH) | 使用 COSIGN_OIDC_ 环境变量预置令牌 |
Rekor 返回 connection refused |
Docker 容器未启动或端口映射错误 | 执行 docker-compose ps 检查容器状态 |
签名时提示 no matching OIDC |
OIDC 令牌过期或未正确设置 | 重新获取令牌或检查 COSIGN_OIDC_ 变量 |