4、签名工具链:Cosign、Notation、GPG、Sigstore生态、HashiCorp Vault集成
在IDP制品签名链路中,签名工具链的选择直接决定了签名的安全性、可审计性以及回滚操作的可行性。本章深入剖析五种核心签名工具/生态及其与HashiCorp Vault的集成模式,帮助你在自动化部署中构建可回滚的签名基础设施。
4.1 签名工具全景对比
下表从密钥管理、签名格式、回滚友好度三个维度对比主流签名工具,为选型提供决策依据。
| 工具/生态 | 密钥管理方式 | 签名格式 | 回滚友好度 | 适用场景 |
|---|---|---|---|---|
| Cosign | 密钥对 / 密钥less (OIDC) | OCI 镜像签名 (DSSE) | 高(支持回滚签名版本) | 容器镜像、OCI制品 |
| Notation | 证书链 / 可信CA | COSign v1 / JWS | 中(依赖证书轮换策略) | 企业级制品、合规审计 |
| GPG | 本地密钥环 / 智能卡 | OpenPGP 签名 | 低(密钥分发复杂) | 传统软件包、Git提交 |
| Sigstore生态 | Fulcio CA / Rekor 透明日志 | X.509 + TSA 时间戳 | 极高(透明日志可追溯) | 开源项目、CI/CD流水线 |
| HashiCorp Vault | 集中式密钥管理 + 动态密钥 | 统一签名API | 高(密钥版本化 + 审计) | 企业级密钥中心、多工具统一 |
选型建议: 在IDP回滚场景中,优先选择支持签名版本化和透明日志的工具组合。Cosign + Sigstore 生态是当前最推荐的组合,Notation 适合已有PKI体系的企业。
4.2 Cosign:容器签名的事实标准
Cosign 是 Sigstore 项目的一部分,专为容器镜像和OCI制品设计。其核心优势在于支持密钥less签名(通过OIDC身份)和回滚签名版本。
4.2.1 Cosign 签名与回滚流程
# 使用密钥对签名镜像
cosign sign --key cosign.key registry.example.com/app:v1.0.0
# 验证签名
cosign verify --key cosign.pub registry.example.com/app:v1.0.0
# 回滚时:对旧版本重新签名并推送
cosign sign --key cosign.key registry.example.com/app:v0.9.0
# 查看签名历史(需配合透明日志)
cosign tree registry.example.com/app:v1.0.0
回滚关键点: Cosign 支持对同一镜像标签追加多个签名版本。回滚时只需对目标版本重新签名,并更新部署策略引用即可。配合 Rekor 透明日志,可审计所有签名操作。
4.3 Notation:企业级证书签名
Notation 是微软主导的制品签名工具,基于X.509证书链,适合已有PKI体系的企业。其回滚机制依赖证书轮换策略和签名时间戳。
4.3.1 Notation 签名与验证
# 使用证书签名
notation sign --key notation.key --cert notation.crt registry.example.com/app:v1.0.0
# 验证签名(需配置信任策略)
notation verify registry.example.com/app:v1.0.0
# 回滚时:使用同一证书对旧版本签名
notation sign --key notation.key --cert notation.crt registry.example.com/app:v0.9.0
注意: Notation 的回滚依赖证书的有效期和信任策略。如果证书已过期,回滚签名将失败。建议使用短期证书 + 自动轮换策略,并保留历史证书的信任锚点。
4.4 GPG:传统但可靠的签名方式
GPG(GnuPG)是历史最悠久的签名工具之一,广泛用于软件包和Git提交签名。在IDP回滚场景中,GPG的密钥分发和管理是主要挑战。
4.4.1 GPG 签名与回滚
# 生成GPG密钥对
gpg --full-generate-key
# 导出公钥
gpg --export -a "user@example.com" > public.key
# 签名制品
gpg --detach-sign --armor artifact.tar.gz
# 验证签名
gpg --verify artifact.tar.gz.asc artifact.tar.gz
# 回滚时:使用同一私钥对旧版本签名
gpg --detach-sign --armor artifact-v0.9.0.tar.gz
GPG回滚建议: 使用子密钥分离签名和加密用途,并定期轮换子密钥。将公钥存储在可信密钥服务器或Vault中,确保回滚时验证方能够获取正确的公钥。
4.5 Sigstore生态:透明日志驱动的可追溯签名
Sigstore 生态由 Fulcio(证书颁发机构)、Rekor(透明日志)和 Cosign 组成。其核心价值在于签名操作的不可否认性和可追溯性,是回滚审计的最佳实践。
4.5.1 Sigstore 签名与回滚流程
# 密钥less签名(通过OIDC身份)
cosign sign registry.example.com/app:v1.0.0
# 验证签名(自动查询Rekor日志)
cosign verify registry.example.com/app:v1.0.0
# 回滚时:使用相同OIDC身份对旧版本签名
cosign sign registry.example.com/app:v0.9.0
# 查询签名历史(Rekor日志)
rekor-cli search --artifact registry.example.com/app@sha256:...
回滚优势: Sigstore 的透明日志记录了每一次签名操作,包括签名者身份、时间戳和制品摘要。回滚时,审计人员可以验证旧版本的签名是否由授权身份在有效时间窗口内完成。
4.6 HashiCorp Vault集成:统一密钥管理与签名
HashiCorp Vault 作为集中式密钥管理平台,可以统一管理 Cosign、Notation、GPG 的密钥,并提供动态密钥、密钥版本化和审计日志。这是企业级IDP回滚签名链路的关键基础设施。
4.6.1 Vault 集成架构
下图展示了 Vault 如何作为签名工具链的密钥中心,为不同工具提供统一的密钥存储和签名API。
4.6.2 Vault Transit 引擎签名示例
Vault 的 Transit 引擎支持对数据进行签名和验证,无需导出私钥。以下示例展示如何使用 Vault API 进行签名操作。
# 启用 Transit 引擎
vault secrets enable transit
# 创建签名密钥
vault write -f transit/keys/signing-key type=ecdsa-p256
# 使用 Transit 签名数据
vault write transit/sign/signing-key \
input=$(echo -n "artifact-data" | base64) \
signature_algorithm=sha2-256
# 验证签名
vault write transit/verify/signing-key \
input=$(echo -n "artifact-data" | base64) \
signature="vault:v1:..." \
signature_algorithm=sha2-256
Vault 回滚优势: Vault 支持密钥版本化(key rotation),每次签名操作都记录审计日志。回滚时,可以指定使用历史密钥版本对旧制品签名,确保签名密钥与制品版本匹配。
4.7 签名工具链回滚策略对比
下表总结了不同签名工具在回滚场景中的关键策略差异。
| 策略维度 | Cosign | Notation | GPG | Sigstore | Vault集成 |
|---|---|---|---|---|---|
| 密钥版本化 | 支持(多签名) | 依赖证书轮换 | 手动管理 | 自动(Fulcio) | 原生支持 |
| 回滚审计 | Rekor日志 | 证书透明度 | 本地日志 | 透明日志 | 审计日志 |
| 密钥less签名 | 支持 | 不支持 | 不支持 | 支持 | 支持(动态密钥) |
| 回滚复杂度 | 低 | 中 | 高 | 低 | 低 |
| 推荐场景 | 容器原生 | 企业合规 | 传统系统 | 开源/云原生 | 统一管理 |
4.8 签名工具链选型决策树
下图帮助你在IDP项目中快速选择签名工具链组合。
最佳实践: 在IDP自动化部署中,推荐采用 Cosign + Sigstore + Vault 的组合。Cosign 提供容器签名能力,Sigstore 提供透明日志审计,Vault 提供统一密钥管理和回滚版本控制。对于已有PKI体系的企业,可采用 Notation + Vault 组合。