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

Mensagem de erro

Password was not given but private key is encrypted

O caso inverso também existe: “Password was given but private key is not encrypted.” — mesma chamada, divergência oposta (os dois reproduzidos na cryptography 50.0).

Python cryptography — TypeError from load_pem_private_key

O que significa

Você chamou load_pem_private_key(data, password=None) com uma chave privada criptografada — o PEM dela diz ENCRYPTED PRIVATE KEY ou traz cabeçalhos Proc-Type: 4,ENCRYPTED. A biblioteca enxerga o envelope de criptografia e se recusa a adivinhar: ela precisa da frase secreta em bytes ou de uma chave que realmente não esteja criptografada.

Por que acontece

Como corrigir

  1. 1.

    Fornecer a frase secreta em bytes

    Obtenha a senha do cofre de segredos e passe-a codificada em bytes; por precaução, remova espaços em branco nas extremidades.

    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.

    Ou descriptografar a chave uma única vez, no provisionamento

    Se o ambiente de execução não consegue gerenciar uma frase secreta, guarde a chave sem criptografia em um gerenciador de segredos adequado — uma chave criptografada cuja senha está no mesmo arquivo env não acrescenta proteção nenhuma. E, se a frase secreta já tiver viajado junto com a chave em um repositório, rotacione a chave: nesse caso, a criptografia era só enfeite.

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

Erros relacionados

Ver toda a base de erros de assinatura