Message d’erreur
Incorrect password, could not decrypt key
Également affiché sous la forme
- ValueError: Incorrect password, could not decrypt key
- Bad decrypt. Incorrect password?
Libellé selon la version (vérifié sur chacune) : 45.0 et les versions ultérieures « Incorrect password, could not decrypt key » ; 43 et 44 signalent un mot de passe erroné par « Could not deserialize key data… the provided password may be incorrect… » ; 42 et les versions antérieures « Bad decrypt. Incorrect password? ».
Python cryptography — ValueError from load_pem_private_key / load_der_private_key / pkcs12.load_key_and_certificates
Ce que cela signifie
La clé est chiffrée et cryptography a tenté de la déchiffrer avec le mot de passe que vous avez fourni, mais le déchiffrement a échoué. Les clés privées chiffrées ne contiennent aucun « indice de mot de passe » – le seul signal est que les octets déchiffrés ne forment pas une clé valide –, si bien que cette erreur signifie toujours que les octets passés ne sont pas la phrase de passe utilisée lors du chiffrement.
Pourquoi cela se produit
Un saut de ligne final fait partie du mot de passe
fréquenteLes phrases de passe enregistrées avec `echo secret > file`, dans des secrets Kubernetes créés à partir de fichiers ou dans des fichiers `.env` se terminent souvent par `\n`. Lire le fichier tel quel transmet un octet de trop.
La phrase de passe appartient à une autre clé
fréquentePlusieurs clés et plusieurs phrases de passe dans un même magasin de secrets, ou une clé chiffrée de nouveau lors d’une rotation alors que l’application a conservé l’ancienne phrase de passe.
Phrase de passe non ASCII encodée différemment
occasionnelleL’outil qui a chiffré la clé a pu utiliser Latin-1 ou UTF-16 pour une phrase de passe contenant des caractères non ASCII, alors que votre code encode en UTF-8. Les caractères correspondent ; les octets, non.
Fichiers PKCS#12 issus d’outils anciens
occasionnelleCertains anciens exports `.p12` traitent différemment un mot de passe vide (absence de mot de passe ou chaîne vide). Essayez délibérément `None` et `b""` plutôt que de deviner d’autres valeurs.
Comment corriger l’erreur
- 1.
Lire la phrase de passe à l’octet près
Ne retirez que les fins de ligne, jamais les autres caractères d’espacement, et conservez la phrase de passe sous forme d’octets, de la source jusqu’au chargeur.
python from pathlib import Path passphrase = Path("/run/secrets/key_passphrase").read_bytes().rstrip(b"\r\n") key = serialization.load_pem_private_key(pem, password=passphrase) - 2.
Confirmer la phrase de passe en dehors de votre code
Si OpenSSL accepte la phrase de passe saisie à la main mais que votre code échoue, la différence tient à la façon dont le code la lit (saut de ligne, encodage). Si OpenSSL échoue aussi, la phrase de passe est tout simplement erronée.
bash # Prompts for the passphrase; "bad decrypt" means the passphrase is wrong, not the file openssl pkey -in encrypted.pem -noout && echo "passphrase OK" printf '%s' "$KEY_PASSPHRASE" | wc -c # length without a trailing newline