You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Sigstore Cosign V2验证容器镜像签名及相关技术疑问

Cosign无密钥模式镜像签名与验证问题解答

场景说明

我正在尝试使用Cosign验证容器镜像,以csi-node-driver-registrar镜像为例(只要是作者签名的镜像即可)。已执行以下CLI命令并成功验证:

cosign verify registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.9.3 --certificate-identity krel-trust@k8s-releng-prod.iam.gserviceaccount.com --certificate-oidc-issuer https://accounts.google.com

但有效的certificate-identity和certificate-oidc-issuer是从错误提示里获取的,这种方式显然不合理,因此需要明确以下两个问题:


1. Cosign无密钥(keyless)模式的签名与验证逻辑

签名流程

  • 签名者通过OIDC提供商(如Google、GitHub)完成身份认证,获取临时ID Token。
  • Cosign调用Fulcio(开源根CA服务),提交ID Token申请短期签名证书,证书中会嵌入OIDC身份(即验证时用的certificate-identity)和OIDC签发者地址(即certificate-oidc-issuer)。
  • 使用该短期证书对镜像签名,将签名结果与证书一同上传至镜像仓库,与镜像绑定存储。
  • 短期证书会自动过期,从根源避免密钥泄露风险。

验证流程

  • Cosign从镜像仓库拉取签名及对应证书。
  • 调用Rekor(透明日志服务)验证证书合法性,确认证书由Fulcio签发且签名日志已被记录。
  • 检查证书中的certificate-identity和certificate-oidc-issuer是否匹配指定的可信值,同时验证签名与镜像内容的一致性。

2. 获取第三方签名镜像的合法certificate-identity和certificate-oidc-issuer

无需依赖错误提示,有三种可靠方式:

  • 查看官方文档/发布说明:正规项目(如Kubernetes生态镜像)会在发布页面、镜像仓库描述或安全文档中明确给出签名所用的身份信息和OIDC签发者。
  • 直接拉取签名元数据:执行不带验证条件的Cosign命令,获取所有签名相关信息:
    cosign verify registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.9.3 --insecure-ignore-tlog
    
    输出结果中会包含证书的subject(对应certificate-identity)和issuer字段(对应certificate-oidc-issuer),直接提取即可。
  • 查询Rekor透明日志:若镜像签名已上传至Rekor,可通过镜像哈希查询签名记录:
    rekor-cli search --artifact registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.9.3
    
    拿到日志条目ID后,执行rekor-cli get --uuid <条目ID>查看详细内容,从中提取证书的身份和签发者信息。

内容的提问来源于stack exchange,提问作者Zhou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:26:12