sslv3警告ハンドシェイクに失敗する – Python 2.7.6のフィードパーサーエラー – と回避策

sslv3警告ハンドシェイクに失敗する – Python 2.7.6のフィードパーサーエラー – と回避策

私は「feedparser」モジュールを介してRSSフィードからアイテムを選択するためにPythonスクリプト(Ubuntu 14.04LTSの2.7.6)を使用しています。今週、特定のウェブサイトの1つで動作が停止しました。あちこちを見た後、 Feedparser.parse() はエラーコードのある構造を返します。

'bozo_exception': URLError(SSLError(1, '_ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure'),)

特定のSSLまたはTLSバージョンを強制する必要がありますか?

より低いレベルに達するには、さまざまなurllibモジュール(urllib、urllib2、urllib3)をお試しください。結果は次のとおりです。

import urllib3
req = urllib3.PoolManager().request('GET', my_https_url)

次のようないくつかの警告で応答します。

/usr/lib/python2.7/dist-packages/urllib3/util/ssl_.py:133: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecurePlatformWarning

明らかに、この問題はPython 2.7.9で解決されましたが、以前のバージョンのUbuntu 14.04はシステムにプレインストールされていません。しかし、まだ実行する必要がある古いソフトウェアがあるので、このOSが欲しいです。

簡単な解決策:python3のみを使用するようにRSSセレクタを更新するだけで十分でした(3.4.3は最新の14.04です)。トランスポートレベルオプション(特定の方法でSSLContextを生成するなど)などの特別なものをFeedparserモジュールに渡す必要はありません。デフォルトはうまく機能します。 python2->3 に必要な唯一の変更は print() と一部の文字列バイト s.encode('utf-8') エントリです。

ベストアンサー1

SSLv3ネゴシエーションエラーが表示されました。 SSLv3 は廃止されました。

SSLv2は2011年に、SSLv3は2015年に廃止されました。

最新リリースでは、SSLv2 と v3 は実装されなくなりました。これらのプロトコルをまだサポートしている以前のバージョンのUnix / Linuxを使用して正しく設定されているサイトでも、Apacheは長い間そのプロトコルを無効にするように設定されています。

発見したように、解決策は他のプロトコルをサポートするより現代的なライブラリ/ソフトウェアにアップグレードすることです。 SSLv3を使用するいくつかの内部レガシーソリューションがある場合は、アップグレードするソフトウェアのバージョンによっては、近いうちに問題が発生する可能性があります。

おすすめ記事