2016-05-09 2 views
1

Я получаю следующее сообщение об ошибке при попытке чтения сертификата:OpenSSL ошибка криптография: [('PEM подпрограммы', 'PEM_read_bio', 'не начало строки')]

OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')] 

при запуске OpenSSL.crypto.load_certificate(FILETYPE_PEM, filename). Я сделал некоторые исследования, но не смог найти ответ, свойственный моему делу.

Я попытался проверить, существовал ли файл с os.path.isfile(filename), который возвращает True, но загрузка сертификата ТОЛЬКО вызывает ошибку выше.

Кроме того, при выполнении на терминале openssl X509 -in file.pem он работает как шарм.

file.pem выглядит следующим образом:

-----BEGIN CERTIFICATE----- 
<<sensitive data>> 
-----END CERTIFICATE----- 

кажется действительным, так как я в состоянии выполнять основные openssl операции на терминале. Я использую CentOS 7, если это помогает.

Любые идеи?

Спасибо!

+0

ли файл PEM содержать '----- BEGIN CERTIFICATE -----' или '----- НАЧАТЬ X509 СЕРТИФИКАТ ----- 'перед частью base64? –

+0

Возможно, вы можете поделиться своим содержимым PEM. Если PEM чувствителен, удалите все, кроме первой строки base64. –

+0

Да, PEM содержит все строки сертификата начала и конца, я добавлю его к своему сообщению –

ответ

1

Согласно http://www.pyopenssl.org/en/stable/api/crypto.html#OpenSSL.crypto.load_certificate, load_certificate() берет буфер (строка будет делать), содержащую сертификат, а не имя файла.

Ваша потребность сделать:

with open(filename, "r") as my_cert_file: 
    my_cert_text = my_cert_file.read() 
    cert = load_certificate(FILETYPE_PEM, my_cert_text) 
+0

. Я попробую это прямо сейчас и позвольте вам, как только я получу результаты, спасибо! –

+0

Большое спасибо за вашу помощь! Но у меня есть быстрый вопрос, для чего нужен «r»? –

+1

Np. 'r' означает открыть файл в режиме только для чтения. –

Смежные вопросы