Не удалось десериализовать ошибку данных ключа при загрузке закрытого ключа openssl с модулем криптографии в Python3 - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь загрузить закрытый ключ, сгенерированный с использованием OpenSSL, с помощью модуля шифрования Python.

openssl genrsa -out rootCA.key 4096

Ключ был сгенерирован как:

И он загружаетсяas:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import load_der_private_key
import os

with open(os.getcwd() + '/rootCA.key', 'rb') as f:
    der_data=bytes(f.read())

key = load_der_private_key(der_data, password=None, backend=default_backend())
print (key)

Но я получаю эту ошибку:

 File "loading_key.py", line 9, in <module>
    key = load_der_private_key(der_data, password=None, backend=default_backend())
  File "/usr/local/lib/python3.6/dist-packages/cryptography/hazmat/primitives/serialization/base.py", line 28, in load_der_private_key
    return backend.load_der_private_key(data, password)
  File "/usr/local/lib/python3.6/dist-packages/cryptography/hazmat/backends/openssl/backend.py", line 1080, in load_der_private_key
    password,
  File "/usr/local/lib/python3.6/dist-packages/cryptography/hazmat/backends/openssl/backend.py", line 1251, in _load_key
    self._handle_key_loading_error()
  File "/usr/local/lib/python3.6/dist-packages/cryptography/hazmat/backends/openssl/backend.py", line 1309, in _handle_key_loading_error
    raise ValueError("Could not deserialize key data.")
ValueError: Could not deserialize key data.

Может ли кто-нибудь помочь с этим?Кажется, я не могу выяснить проблему, так как она кажется очень простой.Я не мог видеть никакой другой команды в модуле cryptography относительно этого, поэтому я не уверен, что это неправильный способ решения проблем.

РЕДАКТИРОВАТЬ:

Для справочных целей или тех, кто сталкивается с аналогичной проблемой, вот как выглядит окончательное решение:

with open(os.getcwd() + '/rootCA.key', "rb") as key_file:
         private_key = serialization.load_pem_private_key(
             key_file.read(),
             password=None,
             backend=default_backend()
         )

1 Ответ

0 голосов
/ 28 января 2019

Эта команда openssl genrsa создает ключ в формате PEM (это текстовый файл с разделителями начала и END, окружающий ключ, закодированный в base64, вы можете посмотреть его любым редактором или пейджером).

Однакоожидается, что функция load_der_private_key получит ключ в формате DER (в виде необработанных байтов).Эта функция не может обработать ключ в формате PEM, и поэтому выдает ошибку.

Чтобы исправить, либо передайте содержимое файла PEM в load_pem_private_key вместо load_der_private_key, либо сгенерируйте DERпредставление вашего ключа из файла PEM, запустив openssl rsa -in RootCA.key -inform pem -out RootCA.der -outform der, а затем передайте содержимое этого файла DER в load_der_private_key.

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