pyopenssl не может установить сертификат x509 [сертификат должен быть экземпляром X509]

Я использую pyopenssl lib и хочу сгенерировать файл p12, используя их apis объекта crypto.PKCS12.

поэтому это значение сертификата получается из API и сохраняется в файле, как показано ниже:

echo -e "----- текст сертификата с началом и концом -----"> cert.crt

который создает файл, и когда я запускаю команду ниже, появляется правильный результат, и даже когда я проверяю его онлайн, он показывает все хорошо:

openssl x509 -in cert.crt -text -noout

теперь проблема заключается в том, что при использовании приведенного ниже сертификата для объекта PKCS12 возникает ошибка:

from OpenSSL import crypto

p12 = crypto.PKCS12()
p12.set_certificate("/home/someuser/Documents/path/to/cert.crt")

то выдает ошибку:

Файл "/home/someuser/.local/lib/python3.6/site-packages/OpenSSL/crypto.py", строка 2429, в set_certificate raise TypeError («сертификат должен быть экземпляром X509»)

Я не могу понять, почему библиотека жалуется на сертификат. Что мне здесь не хватает?


person arash moeen    schedule 04.11.2019    source источник


Ответы (1)


Перед установкой контейнера PKCS12 необходимо загрузить сертификат как объект X509.

Итак, в первую очередь вам следует:

  • Прочитать содержимое файла сертификата в буфер
  • Создайте X509 из буфера, используя load_certificate.

В результате это может выглядеть так:

from OpenSSL import crypto

with open("/home/someuser/Documents/path/to/cert.crt", "r") as file:
    data = file.read()

x509 = crypto.load_certificate(crypto.FILETYPE_PEM, data);

p12 = crypto.PKCS12()
p12.set_certificate(x509)

person antonku    schedule 04.11.2019