Вызов API REST с зашифрованным сертификатом клиента PEM

У меня есть зашифрованный сертификат клиента и зашифрованный ключ в виде файлов PEM, и я хочу пройти аутентификацию на веб-сайте и получить страницу (через GET) с помощью скрипта Python. Мне уже удалось это сделать с помощью curl в оболочке. Итак, я попытался вызвать curl из скрипта Python, но не могу использовать subprocess.Popen для отправки пароля через стандартный ввод, поскольку пароль не читается через стандартный ввод с помощью curl (аналогично ssh). Я был бы еще счастливее, если бы был способ использовать стандартные библиотеки Python для декодирования зашифрованного сертификата и использования его для доступа к веб-сайту.

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

  • Я не хочу никуда сохранять незашифрованный сертификат.
  • Пользователь должен указать свою парольную фразу только один раз, а затем следует сделать несколько запросов.
  • Он должен работать с python 2.7.3, желательно даже с python 2.6.

person Jonathan Square    schedule 03.10.2015    source источник
comment
Возможно, это то, что вы ищете? stackoverflow.com/questions/23705770/   -  person sirfz    schedule 03.10.2015


Ответы (1)


Мне удалось найти решение с помощью pycurl:

import pycurl
from StringIO import StringIO
buffer = StringIO()
c = pycurl.Curl()
c.setopt(c.URL, MYURL)
c.setopt(c.WRITEFUNCTION, buffer.write)
c.setopt(c.SSLCERT, 'clientcert.pem')
c.setopt(c.SSLCERTPASSWD, passphrase)
c.setopt(c.SSLKEY, 'clientkey.pem')
c.perform()
c.close()
print buffer.getvalue()
person Jonathan Square    schedule 03.10.2015