2014-12-30 6 views
0

Код ниже работает в Windows, но на Ubuntu Я получаю ошибку (35, 'ошибка чтения ключа X.509 или сертификата файл'). Похоже, pycurl не может найти путь к файлу сертификата:pycurl.error: (35, 'ошибка чтения X.509 ключ или файл сертификата')

c.setopt(c.URL, self.INTERFACE_URL) 
    c.setopt(c.POST, True) 
    c.setopt(c.HTTPHEADER, ["Content-Type: text/xml"]) 
    c.setopt(c.HTTPAUTH, c.HTTPAUTH_BASIC) 
    c.setopt(c.USERPWD, self.AUTHORIZATION_PASS) 
    c.setopt(c.POSTFIELDS, body) 
    c.setopt(c.SSL_VERIFYPEER, True) 
    c.setopt(c.SSLVERSION, 3) 
    c.setopt(c.CAINFO, "geotrust.pem"); 
    c.setopt(c.VERBOSE, True) 
    c.setopt(c.SSL_VERIFYHOST, 2) 
    c.setopt(c.SSLCERT, "WS*******._.1.pem") 
    c.setopt(c.SSLKEY, "WS*******._.1.key") 
    c.setopt(c.SSLKEYPASSWD, "**********") 
    c.setopt(c.WRITEFUNCTION, response.write) 
    c.perform() 
    c.close() 

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

«Pycurl кажется установить CAINFO и CAPATH к их значениям по умолчанию одновременно, что может привести к некоторой путанице. Я настраиваю своего потребителя на использование CAPATH и должен был вызвать c.unsetopt (pycurl.CAINFO), чтобы заставить работу работать должным образом. Я забыл, что столкнулся с этой трудностью до тех пор, пока вы отправили это электронное письмо. Другая возможность заключается в том, что pycurl не может найти сертификат, который вы предоставили в аргументе CAINFO. Вы можете попробовать поставить путь в качестве средства для CAINFO ».

Любые идеи?

ответ

0

Основная причина в том, что с debian, ubuntu, rasbian pycurl материал привязан к gnutls, а не openssl или windows/mac os crypto API. С gnutls параметры *passwd кажутся молча игнорируемыми. Таким образом, защищенные ключевые файлы не поддерживаются.

Если вы строите свой pycurl, связанный с openssl, он работает. Как это сделать с debian/ubuntu вы найдете here.

Я также подал bug для pycurl. Вы можете подписаться на эту ошибку.

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