讲师中心 微信公众号
AI工具推荐 视频效率加速

Python cosign 的容器镜像签名验证

轻丽小哥_9816

轻丽小哥_9816

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

|

223人浏览过

|

来源于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> 或 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免费学习笔记(深入)”;

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载
  • 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工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

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

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

1669

2023.07.31

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

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

1211

2024.06.27

登录token无效
登录token无效

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

12866

2023.09.14

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

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

1545

2023.09.14

token怎么获取
token怎么获取

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

3477

2023.12.21

token什么意思
token什么意思

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

5641

2024.03.01

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

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

1638

2023.08.03

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

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

2444

2023.09.04

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn