跳到主要内容
ecdsa.com
Sigstore cosign (sign, sign-blob, attest, public-key with --key cosign.key)其他工具

错误信息

decrypt: encrypted: decryption failed

也可能输出为

  • Error: decrypt: encrypted: decryption failed
  • Error: signing artifact.txt: reading key: decrypt: encrypted: decryption failed

前缀取决于命令,例如 `sign-blob` 的前缀是“signing artifact.txt: reading key: decrypt: …”。空的 `COSIGN_PASSWORD` 会被当作密码本身使用,而不表示“提示我输入”。

含义

cosign 私钥(`cosign.key`,标签为 `ENCRYPTED SIGSTORE PRIVATE KEY`)通过 scrypt 和 secretbox 用密码加密。cosign 从 `COSIGN_PASSWORD` 或交互提示中读取了密码,但解密失败——这个密码不是生成密钥时使用的那个。密钥文件本身完好无损;没有对任何内容签名。

原因

修复方法

  1. 1.

    从同一来源提供密钥和密码

    把两者都存为同一环境中的机密,并通过 `env://` 传入密钥,这样它们就不会彼此脱节。

    yaml
    # GitHub Actions: key and its password from the same secret store
    - name: Sign
      env:
        COSIGN_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}
        COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
      run: cosign sign-blob --yes --key env://COSIGN_KEY --bundle dist/app.sigstore.json dist/app.tar.gz
  2. 2.

    考虑在 CI 中使用无密钥签名

    使用 OIDC 身份(GitHub Actions 的 `id-token: write`)时,没有需要管理的长期密钥或密码;验证方改为固定工作流身份。

    yaml
    # Or drop the long-lived key: keyless signing with the workflow's OIDC identity
    permissions:
      id-token: write
    steps:
      - run: cosign sign-blob --yes --bundle dist/app.sigstore.json dist/app.tar.gz

相关错误

浏览完整的签名错误库