Message d’erreur
decrypt: encrypted: decryption failed
Également affiché sous la forme
- Error: decrypt: encrypted: decryption failed
- Error: signing artifact.txt: reading key: decrypt: encrypted: decryption failed
Le préfixe dépend de la commande, par exemple « signing artifact.txt: reading key: decrypt: … » pour `sign-blob`. Un `COSIGN_PASSWORD` vide est utilisé comme mot de passe, et non comme une demande de saisie interactive.
Ce que cela signifie
Les clés privées cosign (`cosign.key`, libellé `ENCRYPTED SIGSTORE PRIVATE KEY`) sont chiffrées avec un mot de passe via scrypt et secretbox. cosign a lu le mot de passe dans `COSIGN_PASSWORD` ou l’a demandé de façon interactive, et le déchiffrement a échoué : ce mot de passe n’est pas celui utilisé lors de la génération de la clé. Le fichier de clé lui-même est intact ; rien n’a été signé.
Pourquoi cela se produit
COSIGN_PASSWORD contient un autre secret
fréquentePlusieurs clés de signature avec des mots de passe différents, ou un secret renommé dans la CI alors que le secret de la clé est resté le même.
COSIGN_PASSWORD est défini mais vide
fréquenteLes systèmes de CI remplacent les secrets manquants par une chaîne vide (par exemple pour les pull requests issues de forks). cosign essaie alors le mot de passe vide au lieu de le demander.
La clé a été régénérée avec un nouveau mot de passe
occasionnelleUne nouvelle exécution de `cosign generate-key-pair` a écrasé la clé, alors que le mot de passe enregistré appartient à la précédente.
Comment corriger l’erreur
- 1.
Fournir la clé et le mot de passe depuis la même source
Stockez-les tous deux comme secrets du même environnement et passez la clé via `env://`, afin qu’ils ne puissent pas se désynchroniser.
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.
Envisager la signature sans clé en CI
Avec une identité OIDC (GitHub Actions `id-token: write`), il n’y a ni clé à longue durée de vie ni mot de passe à gérer ; les vérificateurs fixent à la place l’identité du 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