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

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

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

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

我已经libcurl3-gnutls默认安装了,但没有libcurl4-openssl-dev。所以我安装了后者并重新启动了 Torando 实例。但这似乎不起作用。我仍然收到相同的 gnutls 错误。

我在 curl 邮件列表中找到了关于支持 libcurl 的不同 SSL 后端的问题的旧讨论,但没有找到现在具体是如何实现的。到目前为止,我猜想 openssl 是内置在 libcurl 中的,而 gnutls 是通过单独的包提供的(这将解释为什么没有 libcurl3-openssl)。但我如何让 libcurl 选择 openssl 后端而不是 gnutls?libcurl/pycurl API 中是否有一些选项可以做到这一点?

我尝试卸载libcurl3-gnutls,但 apt-get 提示它也会python-pycurl一起删除。所以这不行。

答案1

这些-dev包是开发包,它们包含库头文件,用于开发和编译使用该库的程序。它们通常不是应用程序二进制包(已编译)所必需的。安装libcurl4-openssl-dev不足以使已构建的二进制包改用libcurl3-gnutlsOpenSSL。它只对您重新编译的应用程序有用。

python-pycurl包有一个直接依赖libcurl3-gnutlslibgnutls26

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

原则上,这可以通过下载源代码( 和相关软件包)来实现apt-get source python-pycurl。您必须进入 Debian 打包配置文件并更改选项(通常传递给在编译前configure配置Makefiles 的脚本),以便更改编译选项,改用 OpenSSL。您可能还需要更改软件包描述以限制对其他软件包的干扰,也许可以使用指令来provide:说明您的软件包可以替换 Ubuntu 打包的软件包。

答案2

我在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-devlibcurl4-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。

答案3

删除 pycurl 模块并使用 pip 重新安装。

sudo pip install pycurl

答案4

据我了解,该软件包libcurl3应该提供 OpenSSL 支持。

相关内容