So ändern Sie das libcurl SSL-Backend von gnutls in openssl auf dem Ubuntu-Server

7

Während der Verarbeitung von Google OpenID SSL-Antworten werden gnutls-spezifische Fehler in meinem Tornado-Webserver angezeigt. Einer der Vorschläge, die ich von der Tornado-Mailingliste erhalten habe, ist, OpenSSL-Backend anstelle von Gnutls zu versuchen. Auf dem Ubuntu-Server (11.10) scheint dies jedoch nicht einfach zu sein.

Auf Ubuntu-Server gnutlswird vom libcurl3-gnutlsPaket bereitgestellt und die Unterstützung von openssl curl wird vom libcurl4-openssl-devPaket bereitgestellt . (Ich weiß nicht, warum das letztere heißt 4und dev, aber ich konnte kein anderes openssl + curl-Paket in der apt-cache-Suche finden).

Ich hatte libcurl3-gnutlsstandardmäßig installiert, aber nicht libcurl4-openssl-dev. Also habe ich die späteren installiert und Torando-Instanzen neu gestartet. Aber das schien nicht zu funktionieren. Ich habe immer noch die gleichen Fehler.

Ich habe alte Diskussionen auf Curl-Mailinglisten über die Probleme bei der Unterstützung verschiedener SSL-Backends für libcurl gefunden, aber nicht genau herausgefunden, wie es heute gemacht wird. Bisher ist meine Vermutung, dass openssl in libcurl integriert ist und gnutls über ein separates Paket bereitgestellt wird (das erklärt, warum es kein libcurl3-openssl gibt). Aber wie mache ich libcurl, um openssl-Backend und nicht gnutls aufzunehmen? Gibt es eine Option in der libcurl / pycurl-API, um dies zu tun?

Ich habe versucht, es zu deinstallieren libcurl3-gnutls, aber apt-get hat mich aufgefordert, es ebenfalls zu entfernen python-pycurl. Das geht also nicht.

Jayesh
quelle

Antworten:

5

Die -devPakete sind die Entwicklungspakete, sie enthalten die Bibliotheksheader, die zum Entwickeln und Kompilieren von Programmen verwendet werden, die die Bibliothek verwenden. Sie werden normalerweise nicht von Anwendungsbinärpaketen benötigt (die bereits kompiliert sind). Die Installation libcurl4-openssl-devreicht nicht aus, um die gegen die libcurl3-gnutlsVerwendung von OpenSSL erstellten Binärpakete zu erstellen. Dies ist nur für Anwendungen nützlich, die Sie erneut kompilieren.

Das python-pycurlPaket hat eine direkte Abhängigkeit von libcurl3-gnutlsund libgnutls26.

Sofern es keine cURL-basierten Pakete für Ubuntu gibt, die gegen OpenSSL anstelle von GnuTLS in einem alternativen Repository kompiliert wurden, müssen Sie diese möglicherweise selbst erstellen.

Dies kann im Prinzip durch Herunterladen der Quelle ( apt-get source python-pycurlund der zugehörigen Pakete) erfolgen. Sie müssten in die Debian-Paketkonfigurationsdateien gehen und die Optionen ändern (normalerweise an das configureSkript übergeben, das auch die Makefiles vor der Kompilierung konfiguriert ), um die Kompilierungsoptionen zu ändern und stattdessen OpenSSL zu verwenden. Möglicherweise müssen Sie auch die Paketbeschreibung ändern, um die Unterbrechung auf die anderen Pakete zu beschränken. Verwenden Sie möglicherweise die provide:Anweisung, um zu sagen, dass Ihr Paket das von Ubuntu gepackte ersetzen kann.

Bruno
quelle
Wie @SwenW sagte, libcurl3wird gegen OpenSSL kompiliert, daher sollte es eine Sache sein oder die Build-Optionen für OpenSSL ändern und davon python-pycurlabhängig machen libcurl3statt libcurl3-gnutls.
Bruno
8

Ich habe eine Lösung für den Debian-Bug-Tracker gesehen .

Ich dachte, ich würde eine Problemumgehung veröffentlichen, damit die Leute das python-pycurl Paket selbst reparieren können.

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

Beachten Sie, dass pycurl möglicherweise aktualisiert wurde, sodass der Name möglicherweise nicht genau lautet. pycurl_7.18.2-1.dsc Bearbeiten Sie die debian/controlDatei und ersetzen Sie alle Instanzen von libcurl4-gnutls-devdurchlibcurl4-openssl-dev

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

Zum Testen einfach auf den Interpreter springen und die Version anschauen.

Früher hieß es:

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'

Es wird jetzt sagen (wenn Sie alles richtig gemacht haben):

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'

Der Grund, warum hier nur die Debian- / Steuerdatei bearbeitet wird, ist, dass beide libcurl4-gnutls-devund libcurl4-openssl-devdie Datei /usr/bin/curl-configzum Erstellen ihrer Pakete verwenden. Eine ist für gnutls Umwelt, während die andere für openssl ist.

niemand
quelle
1
Diese Antwort ist richtig, die Lösung funktioniert und sollte stattdessen die akzeptierte Antwort sein.
vonPetrushev
Edit the debian/control. Hat es ein Update gegeben, das diese Dateien gelöscht hat? Ich kann nur einen debianOrdner finden, der den Namen dieser Dateien ähnelt! Verwendenpycurl-7.19.3
Rafael Almeida
1
Danke das hat funktioniert! Außerdem musste ich libssl-devin Debian installieren , sonst würde ich die Header-Dateien zum Kompilieren nicht finden. Auch das Signieren ist fehlgeschlagen, daher habe ich diesen Befehl verwendet, um das Paket zu erstellen:sudo dpkg-buildpackage -rfakeroot -b -uc -us
Martin
Wie @Martin schrieb. Es funktioniert, wäre aber schön, wenn @nobody diese Antwort mit einem fehlenden libssl-devund anderen dpkg-buildpackageAnruf aktualisieren würde (ich habe genau die gleichen Probleme und Martins Hinweise haben geholfen).
Mikaelblomkvistsson
1

Entfernen Sie das Pycurl-Modul und installieren Sie es mit pip neu.

sudo pip install pycurl
user303356
quelle
0

Soweit ich weiß, sollte das Paket libcurl3OpenSSL-Unterstützung bieten.

Sven
quelle