8 votes

Comment changer le backend SSL de libcurl de gnutls à openssl sur un serveur Ubuntu ?

J'obtiens des erreurs spécifiques à gnutls dans mon serveur web Tornado lors du traitement des réponses SSL de Google OpenID. L'une des suggestions que j'ai reçues de la liste de diffusion Tornado est d'essayer le backend OpenSSL au lieu de gnutls. Mais cela ne semble pas être simple sur le serveur Ubuntu (11.10).

Sur le serveur Ubuntu, gnutls est fourni par libcurl3-gnutls et le support curl d'openssl est fourni par libcurl4-openssl-dev paquet. (Je ne sais pas pourquoi ce dernier est appelé 4 y dev mais je n'ai pas trouvé d'autre paquet openssl+curl dans la recherche apt-cache).

J'avais libcurl3-gnutls installé par défaut, mais pas libcurl4-openssl-dev . J'ai donc installé la dernière version et redémarré les instances de Torando. Mais cela n'a pas semblé fonctionner. J'ai toujours les mêmes erreurs gnutls.

J'ai trouvé d'anciennes discussions sur les listes de diffusion curl concernant les problèmes de support de différents backends SSL pour libcurl, mais je n'ai pas trouvé exactement comment cela est fait aujourd'hui. Jusqu'à présent, je pense qu'openssl est intégré à libcurl et que gnutls est fourni par un paquet séparé (ce qui explique pourquoi il n'y a pas de libcurl3-openssl). Mais comment faire pour que libcurl prenne openssl comme backend et non gnutls ? Existe-t-il une option dans l'API libcurl/pycurl pour faire cela ?

J'ai essayé de désinstaller libcurl3-gnutls mais apt-get a indiqué qu'il supprimerait également python-pycurl avec elle. Donc ça ne marchera pas.

9voto

nobody Points 81

J'ai vu une solution sur Traqueur de bogues Debian .

Je me suis dit que j'allais poster une solution de contournement pour que les gens puissent corriger le problème. python-pycurl eux-mêmes.

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

Notez que pycurl a pu être mis à jour et que le nom peut ne pas être exactement le même. pycurl_7.18.2-1.dsc Modifier le debian/control et remplacer toutes les instances de libcurl4-gnutls-dev con libcurl4-openssl-dev

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

Pour tester, il suffit de sauter sur l'interpréteur et de regarder la version.

Ça disait :

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'

Il dira maintenant (si vous avez tout fait correctement) :

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'

La raison pour laquelle l'édition du fichier debian/control fonctionne ici est que les deux libcurl4-gnutls-dev y libcurl4-openssl-dev utiliser le fichier /usr/bin/curl-config pour construire ses paquets. L'un est pour les environnements gnutls tandis que l'autre est pour openssl.

5voto

Bruno Points 4069

El -dev sont les paquets de développement, ils contiennent les en-têtes de la bibliothèque, utilisés pour développer et compiler les programmes qui utilisent la bibliothèque. Ils ne sont généralement pas requis par les paquets binaires des applications (qui sont déjà compilés). Installation de libcurl4-openssl-dev n'est pas suffisante pour que les paquets binaires qui ont été construits contre libcurl3-gnutls utiliser OpenSSL à la place. Il ne serait utile que pour les applications que vous recompilez contre lui.

El python-pycurl Le paquet a un dépendance directe en libcurl3-gnutls y libgnutls26 .

À moins qu'il n'existe des paquets basés sur cURL pour Ubuntu compilés avec OpenSSL au lieu de GnuTLS dans un autre dépôt, vous devrez malheureusement les construire vous-même.

Cela pourrait être fait en principe en téléchargeant la source ( apt-get source python-pycurl et les paquets connexes). Vous devez aller dans les fichiers de configuration de l'empaquetage Debian et modifier les options (généralement passées à la commande configure script qui configure également l'option Makefile s avant la compilation) afin de changer les options de compilation, pour utiliser OpenSSL à la place. Vous devrez peut-être aussi modifier la description du paquet pour limiter les perturbations des autres paquets, peut-être en utilisant l'option provide: pour indiquer que votre paquet peut remplacer celui empaqueté par Ubuntu.

1voto

user303356 Points 21

Supprimez le module pycurl et réinstallez-le en utilisant pip.

sudo pip install pycurl

0voto

Sven Points 95985

D'après ce que je comprends, le paquet libcurl3 devrait offrir le support d'OpenSSL.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X