Как изменить бэкэнд SSL libcurl с gnutls на openssl на сервере Ubuntu

Я получаю определенные ошибки в моем веб-сервере Tornado при обработке ответов Google OpenID SSL. Одно из предложений, которое я получил из списка рассылки Tornado, - попробовать бэкэнд OpenSSL вместо gnutls. Но на сервере Ubuntu это не так просто (11.10).

На сервере Ubuntu, gnutls обеспечивается libcurl3-gnutls поддержка пакетов и openssl curl обеспечивается libcurl4-openssl-dev пакет. (Я не знаю, почему позже назван 4 а также dev, но я не смог найти какой-либо другой пакет openssl + curl в поиске apt-cache).

я имел libcurl3-gnutls установлен по умолчанию, но не libcurl4-openssl-dev, Поэтому я установил более поздние и перезапустил экземпляры Torando. Но это не сработало. Я все еще получил те же самые ошибки gnutls.

Я нашел старые обсуждения в списках рассылки curl относительно проблем поддержки различных бэкэндов SSL для libcurl, но не нашел точно, как это делается сегодня. До сих пор я предполагаю, что openssl встроен в libcurl, а gnutls предоставляется через отдельный пакет (это объяснит, почему нет libcurl3-openssl). Но как мне сделать, чтобы libcurl использовал openssl, а не gnutls? Есть ли какая-то опция в libcurl/pycurl API, чтобы сделать это?

Я пытался удалить libcurl3-gnutls, но apt-get подсказывает, что он также удалит python-pycurl вместе с этим. Так что это не сработает.

4 ответа

Решение

-dev Пакеты - это пакеты разработки, они содержат заголовки библиотеки, используемые для разработки и компиляции программ, использующих библиотеку. Обычно они не требуются бинарными пакетами приложения (которые уже скомпилированы). Установка libcurl4-openssl-dev недостаточно, чтобы сделать двоичные пакеты, которые были построены против libcurl3-gnutls используйте вместо этого OpenSSL. Это будет полезно только для приложений, которые вы перекомпилируете против него.

python-pycurl пакет имеет прямую зависимость от libcurl3-gnutls а также libgnutls26,

Если в альтернативном репозитории нет пакетов на основе cURL для Ubuntu, скомпилированных с OpenSSL вместо GnuTLS, вам, к сожалению, придется создавать их самостоятельно.

Это можно сделать в принципе, загрузив исходник (apt-get source python-pycurlи связанные пакеты). Вам нужно будет зайти в файлы конфигурации пакетов Debian и изменить параметры (обычно передаются в configure скрипт, который также настраивает Makefileперед компиляцией), чтобы изменить параметры компиляции, вместо этого использовать OpenSSL. Вам также может понадобиться изменить описание пакета, чтобы ограничить сбои других пакетов, возможно, с помощью provide: директива, чтобы сказать, что ваш пакет может заменить тот, который упакован в Ubuntu.

Я видел решение на трекере ошибок Debian.

Я решил опубликовать обходной путь для людей, чтобы исправить python-pycurl упаковать себя.

sudo apt-get install build-essential fakeroot dpkg-dev
mkdir ~/python-pycurl-openssl
cd ~/python-pycurl-openssl
sudo apt-get source python-pycurl
sudo apt-get build-dep python-pycurl
sudo apt-get install libcurl4-openssl-dev
dpkg-source -x pycurl_7.18.2-1.dsc
cd pycurl-7.18.2

Обратите внимание, что pycurl мог быть обновлен, поэтому имя может быть не совсем pycurl_7.18.2-1.dscИзменить debian/control подать и заменить все экземпляры libcurl4-gnutls-dev с libcurl4-openssl-dev

dpkg-buildpackage -rfakeroot -b
sudo dpkg -i ../python-pycurl_7.18.2-1_i386.deb

Для проверки просто прыгайте на интерпретатор и посмотрите на версию.

Раньше говорили:

shell~# python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycurl
>>> pycurl.version
'libcurl/7.18.2 GnuTLS/2.4.2 zlib/1.2.3.3 libidn/1.8'

Теперь он скажет (если вы все сделали правильно):

shell~# python
Python 2.5.2 (r252:60911, Jan  4 2009, 17:40:26)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pycurl
>>> pycurl.version
'libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.8 libssh2/0.18'

Причина, по которой редактирование файла debian/control работает здесь, заключается в том, что оба libcurl4-gnutls-dev а также libcurl4-openssl-dev использовать файл /usr/bin/curl-config строить свои пакеты. Один для окружающей среды gnutls, а другой для openssl.

Снимите модуль pycurl и переустановите его, используя pip.

sudo pip install pycurl

Насколько я понимаю, пакет libcurl3 должен предложить поддержку OpenSSL.

Другие вопросы по тегам