web-dev-qa-db-ja.com

Python:SSLモジュールが利用できないため、HTTPS URLに接続できません

支払いを設定するためにStripeに接続しようとしています。私の開発マシンで動作していますが、製品にプッシュすると、次のSSLエラーが発生します。

SSLモジュールが利用できないため、HTTPS URLに接続できません。

これが私のセットアップの詳細です:

  • Ubuntu 16.04
  • Apache 2
  • mod_wsgi
  • Python 3.6
  • Django 1.11
  • Python/Djangoプロセスはすべて、「protectyourreviews」と呼ばれるanaconda(miniconda)仮想環境にインストールされ、実行されています

私は他の複数のSO回答を読んで、pythonの再インストールを提案していますが、最初に依存関係をインストールするようにしてください。内部およびanaconda環境にインストールする場合、それは問題になりませんか?すべきではありませんか? anacondaがすべての依存関係を処理してくれますか?

HTTPSを有効にし、ドメイン全体で機能しています(すべてのリクエストはhttpsにルーティングされます)。インストールを確認するとopensslがあり、Django環境でシェルを開くと、問題なくモジュールをインポートして使用できます...そのため、方法がわかりません問題のトラブルシューティングを続行します。

どんな助けでも大歓迎です!


また、スタックトレースがここにあります:

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/urllib3/connectionpool.py" in urlopen
  589.             conn = self._get_conn(timeout=pool_timeout)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/urllib3/connectionpool.py" in _get_conn
  251.         return conn or self._new_conn()

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/urllib3/connectionpool.py" in _new_conn
  827.             raise SSLError("Can't connect to HTTPS URL because the SSL "

During handling of the above exception (Can't connect to HTTPS URL because the SSL module is not available.), another exception occurred:

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/requests/adapters.py" in send
  440.                     timeout=timeout

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/urllib3/connectionpool.py" in urlopen
  639.                                         _stacktrace=sys.exc_info()[2])

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/urllib3/util/retry.py" in increment
  388.             raise MaxRetryError(_pool, url, error or ResponseError(cause))

During handling of the above exception (HTTPSConnectionPool(Host='api.stripe.com', port=443): Max retries exceeded with url: /v1/customers (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))), another exception occurred:

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/stripe/http_client.py" in request
  121.                                                **kwargs)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/requests/sessions.py" in request
  508.         resp = self.send(prep, **send_kwargs)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/requests/sessions.py" in send
  618.         r = adapter.send(request, **kwargs)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/requests/adapters.py" in send
  506.                 raise SSLError(e, request=request)

During handling of the above exception (HTTPSConnectionPool(Host='api.stripe.com', port=443): Max retries exceeded with url: /v1/customers (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))), another exception occurred:

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/Django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/Django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/Django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/Django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/Django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/user/protectyourreviews/protectyourreviews/../payments/views.py" in stripe_test
  35.                 source=token

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/stripe/resource.py" in create
  467.         response, api_key = requestor.request('post', url, params, headers)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/stripe/api_requestor.py" in request
  150.             method.lower(), url, params, headers)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/stripe/api_requestor.py" in request_raw
  335.             method, abs_url, headers, post_data)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/stripe/http_client.py" in request
  139.             self._handle_request_error(e)

File "/home/user/miniconda3/envs/protectyourreviews/lib/python3.6/site-packages/stripe/http_client.py" in _handle_request_error
  159.         raise error.APIConnectionError(msg)

Exception Type: APIConnectionError at /payments/test/stripe/
Exception Value: Unexpected error communicating with Stripe.  If this problem persists,
let us know at [email protected].

(Network error: SSLError: HTTPSConnectionPool(Host='api.stripe.com', port=443): Max retries exceeded with url: /v1/customers (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)))

編集


新しいpython virtualenvにmod_wsgiを再インストールした後も、古いアナコンダパスを開こうとしています。WSGIDaemonProcessのpython-homeおよびpython-pathディレクティブを変更しましたが、私は試してみましたが、python= miniconda3ディレクトリから削除しようとしています(これは削除しました)。

Apacheエラーログからのトレースは次のとおりです。

Current thread 0x00007f99f6769780 (most recent call first):
[Mon Aug 28 20:13:15.264466 2017] [core:notice] [pid 26528] AH00051: child pid 26775 exit signal Aborted (6), possible coredump in /etc/Apache2
[Mon Aug 28 20:13:15.264608 2017] [core:notice] [pid 26528] AH00051: child pid 26776 exit signal Aborted (6), possible coredump in /etc/Apache2
[Mon Aug 28 20:13:16.340556 2017] [wsgi:info] [pid 26789] mod_wsgi (pid=26789): Python home /home/user/miniconda3/envs/protectyourreviews.
[Mon Aug 28 20:13:16.341203 2017] [wsgi:warn] [pid 26789] (2)No such file or directory: mod_wsgi (pid=26789): Unable to stat Python home /home/user/miniconda3/envs/protectyourreviews. Python interpreter may not be a$
[Mon Aug 28 20:13:16.341357 2017] [wsgi:info] [pid 26789] mod_wsgi (pid=26789): Initializing Python.
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

編集2


はい、私はクリーンなソースディレクトリから始めました。 mod_wsgi tarファイルを新しいディレクトリにコピーして、新しいディレクトリでconfigure/make/make installを実行しました。念のため、新規インストールの前にApacheモジュールファイルも削除したと思います。

以下のディレクティブ(両方/ python-homeのみ/ python-pathのみ)の複数の反復を試行しましたが、何を試みても、削除されたminiconda3フォルダーをmod_wsgiが探し続ける理由を理解できません。忘れている他の設定ファイルはありますか?

ここに私のwsgi.loadがあります:

LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so

ここに私のApache2ディレクティブがあります(pyr_envは私の新しいPython virtualenv folder)です):

WSGIDaemonProcess protectyourreviews python-home=/home/user/pyr_env/ python-path=/home/user/protectyourreviews
WSGIProcessGroup protectyourreviews

WSGIScriptAlias / /home/user/protectyourreviews/zz_test/test.wsgi
<Directory /home/user/protectyourreviews/zz_test>
        <Files test.wsgi>
                Require all granted
        </Files>
</Directory>

編集3


私はあなたが提案した指示に従いました ドキュメント内 、そして出力が続きます。

Lddの出力は次のとおりです。

$ ldd /usr/lib/Apache2/modules/mod_wsgi.so
        linux-vdso.so.1 =>  (0x00007fffad973000)
        libpython3.5m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0 (0x00007f05b8c02000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f05b89e5000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f05b861a000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f05b83f1000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f05b81d7000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f05b7fd2000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f05b7dcf000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f05b7ac6000)
        /lib64/ld-linux-x86-64.so.2 (0x0000558bed982000)

そして、LD_LIBRARY_PATHの設定を解除した後の出力を次に示します。

$ unset LD_LIBRARY_PATH
$ ldd /usr/lib/Apache2/modules/mod_wsgi.so
        linux-vdso.so.1 =>  (0x00007ffd91bd2000)
        libpython3.5m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0 (0x00007f8bec8a6000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8bec689000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8bec2be000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f8bec095000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8bebe7b000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8bebc76000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f8beba73000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8beb76a000)
        /lib64/ld-linux-x86-64.so.2 (0x000055e8861a5000)

編集4

仮想環境フォルダにアクセス許可が正しく設定されていることを確認し、正しいバージョンであることを確実にするために再コンパイルしました。プロセスからのすべての入力と出力は次のとおりです。

#----CHANGE PERMISSIONS OF VIRTUAL ENVIRONMENT
$ Sudo chgrp -R www-data /home/user/pyr_env/
$ Sudo chmod -R g+rwx /home/user/pyr_env/

#----DELETE OLD FOLDER
$ rm -r mod_wsgi-4.5.17/

#----START FRESH WITH CONFIG/MAKE/INSTALL
$ tar xvfz 4.5.17.tar.gz
$ cd mod_wsgi-4.5.17/
$ ./configure --with-python=/usr/bin/python3
$ make
$ Sudo make install
    /usr/bin/apxs2 -i -S LIBEXECDIR=/usr/lib/Apache2/modules -n 'mod_wsgi' src/server/mod_wsgi.la
    /usr/share/Apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' src/server/mod_wsgi.la /usr/lib/Apache2/modules
    /usr/share/apr-1.0/build/libtool --mode=install install src/server/mod_wsgi.la /usr/lib/Apache2/modules/
    libtool: install: install src/server/.libs/mod_wsgi.so /usr/lib/Apache2/modules/mod_wsgi.so
    libtool: install: install src/server/.libs/mod_wsgi.lai /usr/lib/Apache2/modules/mod_wsgi.la
    libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/lib/Apache2/modules
    ----------------------------------------------------------------------
    Libraries have been installed in:
       /usr/lib/Apache2/modules

    If you ever happen to want to link against installed libraries
    in a given directory, LIBDIR, you must either use libtool, and
    specify the full pathname of the library, or use the `-LLIBDIR'
    flag during linking and do at least one of the following:
       - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
         during execution
       - add LIBDIR to the `LD_RUN_PATH' environment variable
         during linking
       - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
       - have your system administrator add LIBDIR to `/etc/ld.so.conf'

    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
    chmod 644 /usr/lib/Apache2/modules/mod_wsgi.so

#----OUTPUT OF LDD
$ ldd /usr/lib/Apache2/modules/mod_wsgi.so
        linux-vdso.so.1 =>  (0x00007ffcfb9a9000)
        libpython3.5m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0 (0x00007f19ae26f000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f19ae052000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19adc87000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f19ada5e000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f19ad844000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f19ad63f000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f19ad43c000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f19ad133000)
        /lib64/ld-linux-x86-64.so.2 (0x000055aa1cb7a000)

#----RESTART Apache
$ Sudo Apache2ctl restart

残念ながら、Apacheでもまったく同じエラーが発生します。ここにApache2/error.logがあります:

Current thread 0x00007fb350fee780 (most recent call first):
[Wed Aug 30 14:13:08.130076 2017] [core:notice] [pid 9754] AH00051: child pid 28636 exit signal Aborted (6), possible coredump in /etc/Apache2
[Wed Aug 30 14:13:08.130179 2017] [core:error] [pid 9754] AH00546: no record of generation 0 of exiting child 28636
[Wed Aug 30 14:13:08.130833 2017] [wsgi:info] [pid 28639] mod_wsgi (pid=28639): Python home /home/user/miniconda3/envs/protectyourreviews.
[Wed Aug 30 14:13:08.130907 2017] [wsgi:warn] [pid 28639] (2)No such file or directory: mod_wsgi (pid=28639): Unable to stat Python home /home/user/minico$
[Wed Aug 30 14:13:08.130992 2017] [wsgi:info] [pid 28639] mod_wsgi (pid=28639): Initializing Python.
[Wed Aug 30 14:13:08.131665 2017] [wsgi:info] [pid 28638] mod_wsgi (pid=28638): Python home /home/user/miniconda3/envs/protectyourreviews.
[Wed Aug 30 14:13:08.131716 2017] [wsgi:warn] [pid 28638] (2)No such file or directory: mod_wsgi (pid=28638): Unable to stat Python home /home/user/minico$
[Wed Aug 30 14:13:08.131782 2017] [wsgi:info] [pid 28638] mod_wsgi (pid=28638): Initializing Python.
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

削除されたminicondaフォルダーを開こうとしています...

7
Richard

問題は、Anaconda Pythonが独自のSSLライブラリとともに出荷され、Python sslモジュールをコンパイルするときにシステムSSLライブラリを使用しないことです。Apacheのmod_sslモジュールシステムライブラリを使用しています。

したがって、Apacheでmod_sslを有効にすると、システムのSSLライブラリが取り込まれます。 Python sslモジュールがアプリケーションによってインポートされると、それはすでにロードされたシステムSSLライブラリを継承します。これは、sslモジュールがコンパイルされ、期待されているものとは異なるため、失敗します。

したがって、この問題は、Anaconda Python=システムのSSLライブラリを無視し、独自のライブラリを使用することによって引き起こされます。

唯一の解決策は、Anaconda PythonではなくシステムPythonバージョンを使用するか、SSLとプロキシの終了ポイントとしてのみ機能するメインのApacheインストールの背後でmod_wsgi-expressを使用してWSGIアプリケーションを実行することです。 mod_wsgi-expressインスタンスに追加します。

特定の要件がない限り、Anaconda Pythonではなく、システムPythonバージョンを使用することをお勧めします。

12