如何在 Ubuntu 伺服器上將 libcurl SSL 後端從 gnutls 更改為 openssl
在處理 Google OpenID SSL 響應時,我的 Tornado 網路伺服器中出現 gnutls 特定錯誤。我從 Tornado 郵件列表中得到的建議之一是嘗試使用 OpenSSL 後端而不是 gnutls。但在 Ubuntu 伺服器(11.10)上似乎並不簡單。
在 Ubuntu 伺服器上,
gnutls
由libcurl3-gnutls
package 提供,openssl curl 支持由libcurl4-openssl-dev
package 提供。(我不知道為什麼後者被命名為4
anddev
,但我在 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
。所以那不行。
這些
-dev
包是開發包,它們包含庫標頭檔,用於開發和編譯使用該庫的程序。應用程序二進制包(已經編譯)通常不需要它們。安裝libcurl4-openssl-dev
不足以使針對libcurl3-gnutls
使用 OpenSSL 而建構的二進制包。它僅對您針對它重新編譯的應用程序有用。該
python-pycurl
包直接依賴於libcurl3-gnutls
和libgnutls26
。除非在替代儲存庫中有針對 OpenSSL 而不是 GnuTLS 編譯的基於 cURL 的 Ubuntu 包,否則您可能不得不自己建構它們。
這原則上可以通過下載原始碼(
apt-get source python-pycurl
和相關包)來完成。您必須進入 Debian 打包配置文件並更改選項(通常傳遞給在編譯前configure
也配置Makefile
s 的腳本),以便更改編譯選項,改為使用 OpenSSL。您可能還需要更改包描述以限制對其他包的干擾,也許通過使用provide:
指令說您的包可以替換由 Ubuntu 打包的包。