Sigstore cosign (verify-blob / verify with --key)其他工具
错误信息
invalid signature when validating ASN.1 encoded signature
也可能输出为
- Error: failed to verify signature: could not verify message: invalid signature when validating ASN.1 encoded signature
- invalid signature when validating IEEE_P1363 encoded signature
先打印为“Error: …”,然后再打印一次“error during command execution: …”。使用 bundle(`--bundle`)时,cosign 3 会加上前缀“failed to verify signature: could not verify message:”。IEEE P1363 格式的签名报出的则是“…when validating IEEE_P1363 encoded signature”。核心文本在 cosign 2.6 和 3.1 中相同。
Sigstore cosign (verify-blob / verify with --key) — sigstore-go signature verifier
含义
cosign 用你提供的公钥验证了针对制品摘要的 ECDSA 签名(采用 DER/ASN.1 编码,消息的措辞由此而来),结果不匹配。要么这个密钥不是签名所用的密钥,要么制品与当初签名的内容不同。与无密钥验证不同,这里完全不涉及身份或透明日志——失败的就是最基本的签名验证本身。
原因
用错误的公钥验证
常见来自其他项目、其他环境或其他版本系列的密钥;或者密钥已经轮换,但仍有旧签名需要验证。
制品不是被签名的那一个
常见重新构建的二进制文件、重新压缩的归档文件、经过代理下载并被其改动过的文件,或者换行符被转换过的文本。
其他制品的签名文件
偶见多个平台(`linux-amd64`、`darwin-arm64`……)的 `.sig` 文件在下载时或在发布脚本中被搞混了。
修复方法
- 1.
比对摘要和密钥
将制品的 SHA-256 与公布的摘要比对,并将公钥与从签名密钥推导出的公钥比对。
bash sha256sum artifact.txt # compare with the digest published with the release cosign public-key --key release.key > derived.pub # (key holder) public half of the signing key diff <(openssl pkey -pubin -in derived.pub -outform DER | sha256sum) \ <(openssl pkey -pubin -in cosign.pub -outform DER | sha256sum) - 2.
发布 bundle,而不是零散的签名文件
Sigstore bundle 把签名和验证材料放在一起,能避免大多数混淆。
bash # Prefer bundles: signature, verification material and the log entry travel together cosign sign-blob --yes --key release.key --bundle artifact.sigstore.json artifact.txt # uploads to Rekor cosign verify-blob --key release.pub --bundle artifact.sigstore.json artifact.txt
相关错误
--certificate-identity or --certificate-identity-regexp is required for verific…Sigstore cosign 2.x/3.x1 package has an invalid registry signature:npm audit signatures (npm 9.5+)gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]GnuPG (gpg --verify, git verify-commit / verify-tag)