Перейти к содержимому
ecdsa.com
Python cryptographyPython: пакет cryptography

Сообщение об ошибке

Password was not given but private key is encrypted

Бывает и зеркальный случай: «Password was given but private key is not encrypted.» — тот же вызов, обратное несоответствие (оба воспроизведены на cryptography 50.0).

Python cryptography — TypeError from load_pem_private_key

Что это означает

Вы вызвали load_pem_private_key(data, password=None) для зашифрованного закрытого ключа: в его PEM указано ENCRYPTED PRIVATE KEY или есть заголовки Proc-Type: 4,ENCRYPTED. Библиотека видит оболочку шифрования и не пытается угадывать: ей нужна парольная фраза в виде байтов или действительно незашифрованный ключ.

Почему это происходит

Как исправить

  1. 1.

    Передайте парольную фразу в виде байтов

    Получайте пароль из хранилища секретов, кодируйте его в байты и на всякий случай обрезайте пробельные символы по краям.

    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.

    Или расшифруйте ключ один раз, при подготовке окружения

    Если среда выполнения не умеет работать с парольной фразой, храните ключ незашифрованным в полноценном менеджере секретов: зашифрованный ключ, пароль от которого лежит в том же env-файле, не даёт никакой защиты. А если парольная фраза когда-либо хранилась в репозитории рядом с ключом, смените ключ: в этом случае шифрование было лишь украшением.

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

Связанные ошибки

Открыть всю базу ошибок подписей