web-dev-qa-db-ja.com

Ubuntuサーバーでlibcurl SSLバックエンドをgnutlsからopensslに変更する方法

Google OpenID SSL応答の処理中に、トルネードウェブサーバーでgnutls固有のエラーが発生します。 Tornadoメーリングリストから得た提案の1つは、gnutlsではなくOpenSSLバックエンドを試すことです。しかし、Ubuntuサーバー(11.10)では簡単ではないようです。

Ubuntuサーバーでは、gnutlslibcurl3-gnutlsパッケージによって提供され、openssl curlサポートはlibcurl4-openssl-devパッケージによって提供されます。 (後者が4およびdevという名前である理由はわかりませんが、apt-cache検索で他のopenssl + curlパッケージを見つけることができませんでした)。

デフォルトでlibcurl3-gnutlsをインストールしましたが、libcurl4-openssl-devはインストールしませんでした。それで、後でインストールしてTorandoインスタンスを再起動しました。しかし、それはうまくいかなかったようです。私はまだ同じgnutlsエラーが出ました。

LibcurlへのさまざまなSSLバックエンドのサポートの問題に関するcurlメーリングリストに関する古い議論を見つけましたが、今日それがどのように行われているかは正確にはわかりませんでした。これまでのところ、opensslはlibcurlに組み込まれていて、gnutlsは別のパッケージで提供されていると思います(libcurl3-opensslがない理由を説明しています)。しかし、libcurlがgnutlsではなくopensslバックエンドを取得するようにするにはどうすればよいですか?これを行うためのlibcurl/pycurl APIにオプションはありますか?

libcurl3-gnutlsをアンインストールしてみましたが、apt-getはpython-pycurlも一緒に削除することを要求しました。だからそれはしません。

7
Jayesh

-devパッケージは開発パッケージであり、ライブラリを使用するプログラムの開発とコンパイルに使用されるライブラリヘッダーが含まれています。通常、アプリケーションのバイナリパッケージ(既にコンパイルされている)では必要ありません。 libcurl4-openssl-devをインストールしても、libcurl3-gnutlsに対してビルドされたバイナリパッケージをOpenSSLで代用するには不十分です。それに対して再コンパイルするアプリケーションにのみ役立ちます。

python-pycurlパッケージには、libcurl3-gnutlsおよびlibgnutls26に対して 直接依存関係 があります。

代替リポジトリにGnuTLSではなくOpenSSLに対してコンパイルされたUbuntu用のcURLベースのパッケージがない限り、残念ながら自分でビルドする必要があるかもしれません。

これは原則として、ソース(apt-get source python-pycurlおよび関連パッケージ)をダウンロードすることで実行できます。 Debianのパッケージ構成ファイルに移動し、オプションを変更して(通常、コンパイル前にconfiguresも構成するMakefileスクリプトに渡されます)、コンパイルオプションを変更して、代わりにOpenSSL。また、パッケージの説明を変更して、混乱を他のパッケージに限定する必要があるかもしれません。おそらくprovide:ディレクティブを使用して、Ubuntuによってパッケージ化されたパッケージをパッケージで置き換えることができると伝えます。

5
Bruno

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-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を使用してパッケージをビルドするためです。 1つはgnutls環境用で、もう1つはopenssl用です。

8
nobody

Pycurlモジュールを削除し、pipを使用して再インストールします。

Sudo pip install pycurl
1
user303356

私が理解している限り、パッケージlibcurl3はOpenSSLサポートを提供する必要があります。

0
Sven