0

0

Python cosign 的容器镜像签名验证

冰川箭仙

冰川箭仙

发布时间:2026-02-23 17:29:02

|

203人浏览过

|

来源于php中文网

原创

cosign verify 报“no matching signatures”通常因未用镜像digest验证或registry路径不一致;需用registry/repo@sha256:xxx格式,检查digest有效性、公钥格式、tls配置及签名存储模式。

python cosign 的容器镜像签名验证

cosign verify 命令报 “no matching signatures” 是最常见的误判

这通常不是签名没做,而是验证时没指定对的镜像 digest 或者 registry 路径不一致。cosign 只认 registry/repo@sha256:xxx 这种带 digest 的格式,用 tag(比如 myapp:v1.2)直接验几乎必失败——因为 tag 可能被覆盖,而 cosign 签名绑定的是不可变 digest。

实操建议:

  • 先用 docker pull 拉镜像,再用 docker inspect --format='{{.Id}}' <image></image>crane digest 获取准确 digest
  • 验证命令必须写成:cosign verify --key cosign.pub registry.example.com/app@sha256:abc123...
  • 如果镜像来自私有 registry,确保 COSIGN_REPOSITORY 环境变量没意外覆盖默认行为,或显式传 --repository

签名存储位置和镜像 registry 不是同一个地方

cosign 默认把签名推到和镜像同名但加 .sig 后缀的 repository(例如镜像在 ghcr.io/user/app,签名就存 ghcr.io/user/app.sig)。但有些 registry(比如 Harbor 2.8+ 启用 OCI artifact 支持后)会把签名存在同一 repo 下不同 mediaType 的 artifact 中,这时 cosign 需要加 --force-upload 或适配 registry 的 artifact 模式。

常见错误现象:

立即学习Python免费学习笔记(深入)”;

智慧车行预约小程序
智慧车行预约小程序

智慧车行小程序,是一个专门为洗车/4S/车辆维修行业打造的小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约,汽车检测预约等功能。采用腾讯提供的小程序云开发解决方案,无须服务器和域名预约管理:开始/截止时间/人数均可灵活设置,可以自定义客户预约填写的数据项预约凭证:支持线下到场后校验签到/核销/二维码自助签到等多种方式详尽的预约数据:支持预约名单数据导出Excel,打印

下载
  • cosign verify 找不到签名,但 cosign download signature 却能取到——说明签名存对了,但 verify 时 registry 返回的 artifact 列表没包含它(权限或 mediaType 过滤问题)
  • 私有 Harbor 上 verify 失败,但用 cosign verify --insecure-ignore-tls-verify 成功——说明 TLS 证书校验阻断了 artifact 发现流程
  • 签名上传成功,verify 却提示 no signature found for index:多见于 multi-arch 镜像,cosign 默认只签 manifest list 的 digest,没签每个子平台镜像,需加 --recursive

Python 项目里调用 cosign 验证得绕过 subprocess 硬编码陷阱

别在 Python 里拼接字符串调 subprocess.run("cosign verify ..."),容易因 shell 字符(如 registry 密码含 $&)、空格路径、未转义的 digest 引发静默失败。cosign 本身没有官方 Python SDK,所以得靠严谨的参数传递。

实操建议:

  • subprocess.run 的 list 形式:["cosign", "verify", "--key", key_path, f"{registry}/{repo}@{digest}"]
  • 提前检查 digest 是否以 sha256: 开头,否则 cosign 直接报错退出,不给详细提示
  • 捕获 stderr 并检查是否含 "no matching signatures""certificate has expired"——这两类错误不会导致 returncode != 0,但实际验证失败
  • 若集成进 CI/CD,注意 cosign 二进制版本兼容性:cosign verify 在 v2.0+ 默认启用 TUF 验证,老签名可能被拒,可加 --tlog-url="" 关闭

公钥格式不对会导致 “x509: certificate signed by unknown authority”

cosign 支持两种密钥体系:ECDSA(默认)和 Fulcio 签发的证书。如果你用 cosign generate-key-pair 生成的是 cosign.key / cosign.pub,那 cosign.pub 是 PEM 格式公钥,不是证书——但很多人误把它当证书传给 --cert,结果报 x509 错误。

关键区别:

  • --key--cert 是给 Fulcio 场景用的(需要完整证书链),普通 key pair 验证只用 --key 指向 cosign.pub
  • cosign.pub 文件开头是 -----BEGIN PUBLIC KEY-----,不是 -----BEGIN CERTIFICATE-----
  • 如果用了 cosign sign --id-token 走 Fulcio,验证时就得用 --cert + --cert-identity,且 identity 必须和签名时的 OIDC sub 完全一致(包括邮箱大小写)

最容易被忽略的一点:cosign 对公钥文件内容极其敏感——末尾多一个空行、BOM 字节、Windows 换行符,都可能导致解析失败且错误信息毫无提示。用 file cosign.pub 确认是 “PEM certificate” 还是 “PEM public key”,比猜靠谱得多。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

866

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

452

2024.06.27

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6434

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

837

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1087

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1670

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

618

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.09.04

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1127

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号