当前位置: 首页>>技术教程>>正文


如何在Ubuntu服务器上将libcurl SSL后端从gnutls更改为openssl

, , , ,

问题描述

在处理Google OpenID SSL响应时,我的Tornado网络服务器中出现了gnutls特定错误。我从龙卷风邮件列表中得到的建议之一是尝试使用OpenSSL后端而不是gnutls。但这在Ubuntu服务器(11.10)上似乎并不简单。

在Ubuntu服务器上,libcurl3-gnutls软件包提供gnutls,而libcurl4-openssl-dev软件包提供openssl curl支持。 (我不知道为什么后来将其命名为4dev,但在apt-cache搜索中找不到任何其他openssl + curl软件包)。

我默认安装了libcurl3-gnutls,但没有安装libcurl4-openssl-dev。因此,我安装了更高版本并重新启动了Torando实例。但这似乎没有用。我仍然遇到同样的错误。

我在curl邮件列表上发现了有关将不同的SSL后端支持到libcurl的问题的旧讨论,但是今天却找不到确切的做法。到目前为止,我的猜测是openssl内置在libcurl中,而gnutls是通过单独的包提供的(这将解释为什么没有libcurl3-openssl)。但是,如何使libcurl接上openssl后端而不是gnutls? libcurl /pycurl API中是否有某些选项可以做到这一点?

我尝试卸载libcurl3-gnutls,但apt-get提示它也将同时删除python-pycurl。所以那不会。

最佳办法

-dev软件包是开发软件包,它们包含库标头,用于开发和编译使用该库的程序。应用程序二进制软件包(已编译)通常不需要它们。仅安装libcurl4-openssl-dev不足以使针对libcurl3-gnutls构建的二进制程序包改用OpenSSL。它仅对re-compile反对的应用程序有用。

python-pycurl封装在libcurl3-gnutlslibgnutls26上具有direct dependency

除非在替代存储库中有针对OpenSSL而不是针对GnuTLS编译的基于Ubuntu的基于cURL的软件包,否则您可能不得不自己构建它们。

原则上,这可以通过下载源代码(apt-get source python-pycurl和相关软件包)来完成。您必须进入Debian打包配置文件并更改选项(通常在编译之前传递给configure脚本,该脚本还配置Makefile)以更改编译选项,而改为使用OpenSSL。您可能还需要更改软件包说明以将破坏范围限制在其他软件包中,也许是通过使用provide:指令来说明您的软件包可以替换Ubuntu所打包的软件包。

次佳办法

我在Debian bug tracker上看到了一个解决方案。

我想我会发布一种解决方法,让人们自己修复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-devlibcurl4-openssl-dev都使用文件/usr/bin/curl-config来构建其软件包。一种是针对nutl的环境,另一种是针对openssl的。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7824.html,未经允许,请勿转载。