Fehlermeldung
Incorrect password, could not decrypt key
Auch ausgegeben als
- ValueError: Incorrect password, could not decrypt key
- Bad decrypt. Incorrect password?
Wortlaut je Release (in jedem geprüft): ab 45.0 „Incorrect password, could not decrypt key“; 43–44 melden ein falsches Passwort als „Could not deserialize key data… the provided password may be incorrect…“; 42 und älter „Bad decrypt. Incorrect password?“.
Python cryptography — ValueError from load_pem_private_key / load_der_private_key / pkcs12.load_key_and_certificates
Was der Fehler bedeutet
Der Schlüssel ist verschlüsselt, und cryptography hat versucht, ihn mit dem von dir angegebenen Passwort zu entschlüsseln, doch die Entschlüsselung ist fehlgeschlagen. Verschlüsselte private Schlüssel enthalten keinen „Passwort-Hinweis“ – das einzige Signal ist, dass die entschlüsselten Bytes kein gültiger Schlüssel sind. Die Meldung bedeutet daher immer, dass die übergebenen Bytes nicht die Passphrase sind, die bei der Verschlüsselung verwendet wurde.
Warum der Fehler auftritt
Ein Zeilenumbruch am Ende gehört zum Passwort
häufigPassphrasen, die mit `echo secret > file`, in aus Dateien erzeugten Kubernetes-Secrets oder in `.env`-Dateien gespeichert wurden, enden oft auf `\n`. Liest du die Datei unverändert ein, übergibst du ein Byte zu viel.
Die Passphrase gehört zu einem anderen Schlüssel
häufigMehrere Schlüssel und mehrere Passphrasen in einem Secret Store oder ein Schlüssel, der bei einer Rotation neu verschlüsselt wurde, während die Anwendung die alte Passphrase behielt.
Passphrase mit Nicht-ASCII-Zeichen anders kodiert
gelegentlichDas Tool, das den Schlüssel verschlüsselt hat, hat für eine Passphrase mit Nicht-ASCII-Zeichen womöglich Latin-1 oder UTF-16 verwendet, während dein Code in UTF-8 kodiert. Die Zeichen stimmen überein, die Bytes nicht.
PKCS#12-Dateien aus älteren Tools
gelegentlichManche veralteten `.p12`-Exporte behandeln ein leeres Passwort anders (kein Passwort oder leerer String). Probiere gezielt `None` und `b""`, statt andere Werte zu raten.
So behebst du den Fehler
- 1.
Passphrase bytegenau einlesen
Entferne nur Zeilenenden, nie anderen Whitespace, und behalte die Passphrase von der Quelle bis zum Loader als Bytes.
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.
Passphrase außerhalb deines Codes bestätigen
Akzeptiert OpenSSL die von Hand eingetippte Passphrase, während dein Code scheitert, liegt der Unterschied darin, wie der Code sie einliest (Zeilenumbruch, Kodierung). Scheitert auch OpenSSL, ist die Passphrase schlicht falsch.
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