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

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

, поэтому это значение сертификата получается из 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")

, затем выдается ошибка:

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

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

1 Ответ

0 голосов
/ 04 ноября 2019

Требуется загрузить сертификат как объект X509 перед установкой его в контейнер PKCS12.

Итак, во-первых, вы должны:

  • Считать содержимое файла сертификата в буфер
  • Создать 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)

...