Pular para o conteúdo
ecdsa.com
Python cryptographyPython (cryptography)

Mensagem de erro

Password was given but private key is not encrypted.

Também aparece como

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

Python cryptography — TypeError from load_pem_private_key / load_der_private_key

O que significa

Você passou um `password` para uma função de carregamento de chaves, mas a chave está armazenada sem criptografia. A biblioteca cryptography trata isso como erro de programação (`TypeError`) em vez de ignorar a senha, porque aceitá-la em silêncio esconderia um desvio de configuração — por exemplo, uma chave que alguém descriptografou e salvou em texto claro. É o caso inverso de “Password was not given but private key is encrypted”.

Por que acontece

Como corrigir

  1. 1.

    Passar None para chaves não criptografadas

    Normalize valores de configuração vazios para `None`. Se a política exige que as chaves fiquem criptografadas em repouso, trate este erro como sinal de que uma chave não criptografada foi implantada e, em vez disso, substitua a chave.

    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.

    Detectar a criptografia pelo próprio PEM

    Chaves PKCS#8 criptografadas usam o rótulo `ENCRYPTED PRIVATE KEY`; chaves PEM legadas do OpenSSL trazem um cabeçalho `Proc-Type: 4,ENCRYPTED`. Use isso para decidir se é preciso pedir uma frase secreta.

    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

Erros relacionados

Ver toda a base de erros de assinatura