Saltar al contenido
ecdsa.com
Python cryptographycryptography de Python

Mensaje de error

Password was not given but private key is encrypted

También existe el caso inverso, «Password was given but private key is not encrypted.»: la misma llamada con el desajuste contrario (ambos reproducidos con cryptography 50.0).

Python cryptography — TypeError from load_pem_private_key

Qué significa

Tu código llama a load_pem_private_key(data, password=None) con una clave privada cifrada: su PEM dice ENCRYPTED PRIVATE KEY o lleva encabezados Proc-Type: 4,ENCRYPTED. La biblioteca ve el envoltorio de cifrado y se niega a adivinar: necesita la frase de contraseña en bytes, o una clave que de verdad no esté cifrada.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Pasar la frase de contraseña en bytes

    Pasa la contraseña desde tu almacén de secretos, codificada en bytes; elimina los espacios en blanco por precaución.

    python
    import os
    from cryptography.hazmat.primitives.serialization import load_pem_private_key
    
    password = os.environ["KEY_PASSPHRASE"].strip().encode()
    key = load_pem_private_key(pem_bytes, password=password)
  2. 2.

    O descifrar la clave una sola vez, durante el aprovisionamiento

    Si el entorno de ejecución no puede gestionar una frase de contraseña, guarda la clave sin cifrar en un gestor de secretos adecuado: una clave cifrada cuya contraseña está en el mismo archivo env no añade ninguna protección. Y si la frase de contraseña llegó a viajar junto a la clave en un repositorio, rota la clave: en ese caso, el cifrado era pura decoración.

    bash
    openssl pkey -in encrypted.pem -out plain.pem
    # (prompts once for the passphrase; protect plain.pem via the secret store)

Errores relacionados

Explorar toda la base de datos de errores de firma