Google App Engine 内でpython のrequestsライブラリを使用して、プライベート サーバーに GET 要求を送信しています。リクエストを行うと、次の警告が表示されます。
requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning
指摘しているドキュメントによると、GAE が使用する過去の Python 2.7.x をアップグレードするか、pyopenssl を使用する必要があります。GAE に Python 2.7.9 を強制的に使用させることができるとは思えないので、pyopenssl を使用しようとしました。
ページの指示に従って、提案された 3 つのライブラリをアプリの lib ディレクトリにダウンロードし、リクエストを使用する場所で pyopenssl を urllib3 に挿入しようとしました。
import requests.packages.urllib3.contrib.pyopenssl
requests.packages.urllib3.contrib.pyopenssl.inject_into_urllib3()
ただし、これは devserver と運用サーバーでは失敗し、次のトレースバックが表示されます。
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/base/data/home/apps/s~servicey1564/1.383321878696068897/main.py", line 24, in <module>
from API import setupautomatorAPI
File "/base/data/home/apps/s~servicey1564/1.383321878696068897/API.py", line 12, in <module>
from ServiceActivationTest import uploadSAT, getSATsForService
File "/base/data/home/apps/s~servicey1564/1.383321878696068897/ServiceActivationTest/__init__.py", line 3, in <module>
from requests.packages.urllib3.contrib import pyopenssl as pyopenssl
File "/base/data/home/apps/s~servicey1564/1.383321878696068897/lib/requests/packages/__init__.py", line 95, in load_module
raise ImportError("No module named '%s'" % (name,))
ImportError: No module named 'requests.packages.urllib3.contrib.pyopenssl'
この import ステートメントは Python インタープリターで正常に機能し、最後に pyopenssl を外すと機能します。pyopenssl は、そのパスの __init__.py ファイル以外の最初の .py ファイルでもあります。
ここで何か間違ったことをしていますか?InsecurePlatformWarning を修正する簡単な方法はありますか?
更新: ソケット API ページに移動した後 (shazow に感謝します!) 私の問題の一部は、環境変数がないために httplib が正しく動作していないことであることがわかりました。これは警告を取り除きませんでしたが、私の証明書は現在受け入れられています!