Как изменить бэкэнд 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.