Aller au contenu
ecdsa.com
Python cryptographycryptography (Python)

Message d’erreur

Password was given but private key is not encrypted.

Également affiché sous la forme

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

Python cryptography — TypeError from load_pem_private_key / load_der_private_key

Ce que cela signifie

Vous avez passé un `password` à un chargeur de clés, mais la clé est stockée sans chiffrement. Plutôt que d’ignorer le mot de passe, cryptography traite ce cas comme une erreur de programmation (`TypeError`), car l’accepter en silence masquerait une dérive de configuration – par exemple une clé que quelqu’un a déchiffrée puis enregistrée en clair. C’est le cas symétrique de « Password was not given but private key is encrypted ».

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Passer None pour les clés non chiffrées

    Normalisez les valeurs de configuration vides en `None`. Si votre politique impose que les clés soient chiffrées au repos, considérez plutôt cette erreur comme le signe qu’une clé non chiffrée a été déployée, et remplacez la clé.

    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.

    Détecter le chiffrement à partir du PEM lui-même

    Les clés PKCS#8 chiffrées utilisent l’étiquette `ENCRYPTED PRIVATE KEY` ; les anciennes clés PEM d’OpenSSL portent un en-tête `Proc-Type: 4,ENCRYPTED`. Servez-vous-en pour décider s’il faut demander une phrase de passe.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature