Сообщение об ошибке
decrypt: encrypted: decryption failed
Также выводится как
- Error: decrypt: encrypted: decryption failed
- Error: signing artifact.txt: reading key: decrypt: encrypted: decryption failed
Префикс зависит от команды, например «signing artifact.txt: reading key: decrypt: …» для `sign-blob`. Пустое значение `COSIGN_PASSWORD` используется как пароль, а не как указание «спроси меня».
Что это означает
Закрытые ключи cosign (`cosign.key`, метка `ENCRYPTED SIGSTORE PRIVATE KEY`) зашифрованы паролем с помощью scrypt и secretbox. cosign взял пароль из `COSIGN_PASSWORD` или запросил его интерактивно, и расшифрование не удалось: это не тот пароль, с которым ключ был сгенерирован. Сам файл ключа не повреждён; ничего не подписано.
Почему это происходит
В COSIGN_PASSWORD другой секрет
частоНесколько ключей подписи с разными паролями или секрет, переименованный в CI, при том что секрет с ключом остался прежним.
COSIGN_PASSWORD задан, но пуст
частоСистемы CI подставляют вместо отсутствующих секретов пустую строку (например, в pull request из форков). Тогда cosign пробует пустой пароль, а не запрашивает его.
Ключ сгенерирован заново с новым паролем
иногдаПовторный запуск `cosign generate-key-pair` перезаписал ключ, а сохранённый пароль относится к предыдущему.
Как исправить
- 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.
Рассмотрите подпись без ключа в CI
С удостоверением OIDC (GitHub Actions `id-token: write`) не нужно управлять долгоживущим ключом или паролем; вместо этого проверяющие стороны закрепляют удостоверение workflow.
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