Zum Inhalt springen
ecdsa.com
Python cryptographyPython cryptography

Fehlermeldung

Password was given but private key is not encrypted.

Auch ausgegeben als

  • TypeError: Password was given but private key is not encrypted.

Python cryptography — TypeError from load_pem_private_key / load_der_private_key

Was der Fehler bedeutet

Du hast einem Schlüssel-Loader ein `password` übergeben, aber der Schlüssel ist unverschlüsselt gespeichert. cryptography behandelt das als Programmierfehler (`TypeError`), statt das Passwort zu ignorieren, denn stillschweigendes Akzeptieren würde einen Konfigurationsdrift verbergen – etwa einen Schlüssel, den jemand entschlüsselt und im Klartext gespeichert hat. Der Fehler ist das Gegenstück zu „Password was not given but private key is encrypted“.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Für unverschlüsselte Schlüssel None übergeben

    Normalisiere leere Konfigurationswerte zu `None`. Schreibt eine Richtlinie vor, dass Schlüssel verschlüsselt gespeichert sein müssen, werte diesen Fehler als Zeichen, dass ein unverschlüsselter Schlüssel ausgerollt wurde, und ersetze stattdessen den Schlüssel.

    python
    import os
    from cryptography.hazmat.primitives import serialization
    
    passphrase = os.environ.get("KEY_PASSPHRASE") or None   # "" becomes None
    key = serialization.load_pem_private_key(pem, password=passphrase.encode() if passphrase else None)
  2. 2.

    Verschlüsselung am PEM selbst erkennen

    Verschlüsselte PKCS#8-Schlüssel verwenden das Label `ENCRYPTED PRIVATE KEY`; Schlüssel im alten PEM-Format von OpenSSL tragen einen Header `Proc-Type: 4,ENCRYPTED`. Entscheide anhand dessen, ob du nach einer Passphrase fragst.

    python
    def is_encrypted_pem(pem: bytes) -> bool:
        head = pem.lstrip()[:64]
        return head.startswith(b"-----BEGIN ENCRYPTED PRIVATE KEY-----") or b"Proc-Type: 4,ENCRYPTED" in pem

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen