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

Jay*_*esh 7 ubuntu ssl openssl curl gnutls

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

在 Ubuntu 服务器上,gnutlslibcurl3-gnutls包提供,openssl curl 支持由libcurl4-openssl-dev包提供。(我不知道为什么后者被命名为4and dev,但我在 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。所以那不行。

小智 8

我在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
Run Code Online (Sandbox Code Playgroud)

注意 pycurl 可能已更新,因此名称可能不完全是pycurl_7.18.2-1.dsc Edit the debian/controlfile and replace all instances of libcurl4-gnutls-devwithlibcurl4-openssl-dev

dpkg-buildpackage -rfakeroot -b
sudo dpkg -i ../python-pycurl_7.18.2-1_i386.deb
Run Code Online (Sandbox Code Playgroud)

要测试只需跳上解释器并查看版本。

曾经说过:

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'
Run Code Online (Sandbox Code Playgroud)

它现在会说(如果你做的一切都正确):

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'
Run Code Online (Sandbox Code Playgroud)

只需要编辑在debian /控制文件的原因,在这里工作是因为两者libcurl4-gnutls-devlibcurl4-openssl-dev用文件 /usr/bin/curl-config来建立自己的包。一个用于 gnutls 环境,而另一个用于 openssl。


Bru*_*uno 5

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

python-pycurl直接依赖libcurl3-gnutlslibgnutls26

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

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