webdevqa.jp.net

Requestsパッケージ使用時のSSL InsecurePlatformエラー

私はPython 2.7.3とRequestsを使っています。私はpip経由でRequestsをインストールしました。最新版だと思います。私はDebian Wheezyを使っています。

私は過去にRequestsを何度も使ってきましたが、この問題に直面することはありませんでしたが、Requestsを使ってhttpsリクエストを行うとInsecurePlatform例外が発生するようです。

エラーはurllib3に言及していますが、私はそれをインストールしていません。エラーが解決したかどうかを確認するためにインストールしましたが、解決しませんでした。

/usr/local/lib/python2.7/dist-packages/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.

私がこれを手に入れた理由について何か考えはありますか?エラーメッセージで指定されているとおりにドキュメントを確認しましたが、ドキュメントはurllib3をインポートして警告を無効にするか証明書を提供するように言っています。

232
Luke Peckham

やや隠された security 機能を使う:

pip install requests[security]またはpip install pyOpenSSL ndg-httpsclient pyasn1

どちらのコマンドも、次の追加パッケージをインストールします。

  • pyOpenSSL
  • 暗号化
  • イドナ

これは python-2.7.9 + には必要ないことに注意してください。

pip installがエラーで失敗した場合、あなたのシステムにインストールされているlibffilibsslおよびpythonの開発パッケージが必要かどうかをチェックしてください ディストリビューションのパッケージマネージャを使って

  • Debian / Ubuntu - python-devlibffi-devlibssl-devパッケージ。

  • Fedora - openssl-develpython-devellibffi-develパッケージ。

上記のディストリビューションリストは不完全です。

回避策@TomDotTomによる元の回答を参照

必要な開発パッケージのいくつかをインストールできない場合は、その警告を無効にするオプションもあります。

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

pip自体がInsecurePlatformWarningの影響を受けてPyPIから何かをインストールできない場合は、 このステップバイステップガイド を使用して手動で追加のpythonパッケージをデプロイすることで修正できます。

384
plaes

リクエスト2.6では、2.7.9より前のpythonのユーザに対して、利用可能な標準のSSLモジュールのみでこの警告を導入しました。

あなたがより新しいバージョンのpythonにアップグレードすることができないと仮定すると、これはより最新のpython SSLライブラリをインストールするでしょう:

pip install --upgrade ndg-httpsclient 

ただし、pyOpenSSLのビルド依存関係がないと、システムによってはこれが失敗することがあります。 Debianシステムでは、上記のpipコマンドの前にこれを実行することでpyOpenSSLを構築するのに十分なはずです:

apt-get install python-dev libffi-dev libssl-dev
68
Jessica Gadling

私は本番環境では使用しません。一部のテストランナーだけを使用します。そして urllib3のドキュメントを繰り返します

自分のしていることがわかっていて、この警告やその他の警告を無効にしたい場合

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

編集/更新

次のものも動作するはずです。

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
18
TomDotTom

あなたが アップグレードできない あなたのPythonバージョンを2.7.9にして、警告を抑制したいのなら、

あなたはできる あなたの「要求」を格下げする 2.5.3へのバージョン:

Sudo pip install requests==2.5.3

バージョンについて: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

7
raittes

実際、これを試すことができます。

requests.post("https://www.google.com", verify=False)

リクエストのコードを読むことができます。

"C:\Python27\Lib\site-packages\requests\sessions.py"

class Session(SessionRedirectMixin):
......
 def request(self, method, url,
    params=None,
    data=None,
    headers=None,
    cookies=None,
    files=None,
    auth=None,
    timeout=None,
    allow_redirects=True,
    proxies=None,
    hooks=None,
    stream=None,
    verify=None,  # <========
    cert=None):
    """
    ...
    :param verify: (optional) if True, the SSL cert will be verified.
         A CA_BUNDLE path can also be provided.
    ...
    """
7
zzzz zzzz

ここで与えられた解決策のすべては助けていません(私はpython 2.6.6に制限されています)。私はpipに渡すための簡単なスイッチで答えを見つけました:

$ Sudo pip install --trusted-Host pypi.python.org <module_name>

これは、pypi.python.orgからモジュールを入手しても問題ないことをpipに伝えます。

私にとっては、ファイアウォールの背後にある私の会社のプロキシが、一部のサーバーにとって悪意のあるクライアントのように見えるという問題があります。万歳セキュリティ。


更新:PyPiドメインの変更と追加できる--trusted-Hostオプションについては@Alexの answer をご覧ください。 (私はここにコピー/貼り付けしますが、彼の答えは、+1彼です)

5
PfunnyGuy

この答えは無関係ですが、もしあなたが 警告を取り除きたいなら そしてリクエストから次のような警告を得ます:

InsecurePlatformWarning /usr/local/lib/python2.7/dist-packages/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.

あなたのPythonコードに次の行を追加することで disable itできます:

requests.packages.urllib3.disable_warnings()

3
daemonsl

私はapt-get dist-upgradeからのlibssl1.1:AMD64を含むdeb.sury.orgをした後のUbuntu 14.04(Python 2.7.6を含む)で私に思い付きました。

私はcronジョブからcertbot-auto renewを実行しているので、--no-self-upgradeを使って予定外のメンテナンスを減らすこともできます。これが問題の原因となっているようです。

エラーを修正するには、(su--loginスイッチを使って)rootになり、certbot-auto自身をアップグレードさせるだけでした。イー:

Sudo su --login
/usr/local/bin/certbot-auto renew 
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...

通常rootのcrontabから実行するのではなく、

5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

その後、letsencryptのrenwalsは再び正常に実行されました。

1
Dale Anderson

最初に(ZSHから)bashに行かなければなりませんでした。それから

Sudo -H pip install 'requests[security]' --upgrade

問題を修正しました。

1
Martin Thoma

次のように安全でない警告をやめたい場合は、

/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794:InsecureRequestWarning:未確認のHTTPS要求が行われています。証明書検証を追加することを強くお勧めします。参照してください: https://urllib3.readthedocs.org/en/latest/security.html InsecureRequestWarning)

行う:

requests.METHOD("https://www.google.com", verify=False)

verify = False

重要なのは、次のことはそれで得意ではありません:

requests.packages.urllib3.disable_warnings()

または

urllib3.disable_warnings()

しかし、あなたは知っておくべきです、 それは潜在的なセキュリティリスクを引き起こすかもしれません

0
J.Z

PyOpenSSLは近日中に非推奨になるのでインストールしないでください。現在の最善のアプローチは

import requests
requests.packages.urllib3.disable_warnings()

Python 3.6で私がどのように機能しているかを以下に示します。

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
0
Luiz Vaz

私の仕事のために私はピップをアップグレードする必要はありません....

Debian/Ubuntu

依存関係をインストールする

Sudo apt-get install libpython-dev libssl-dev libffi-dev

pipをアップグレードしてパッケージをインストールする

Sudo pip install -U pip
Sudo pip install -U pyopenssl ndg-httpsclient pyasn1

依存関係を削除したい場合

Sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
Sudo apt-get autoremove
0
Thedemon007

私はちょうどもっと古いバージョンのpython2.7の上の/ usr/localにpython 2.7.12をインストールしたCentOS 5サーバーで同様の問題を抱えていました。 CentOS 6または7にアップグレードすることは、現時点ではこのサーバーのオプションではありません。

Python 2.7モジュールの中には古いバージョンのpythonからまだ存在していたものもありますが、新しい暗号化パッケージがCentOS 5パッケージでサポートされていないため、pipはアップグレードに失敗しました。

具体的には、CentOS 5のopensslバージョンが0.9.8eで、暗号化> 1.4.0ではサポートされなくなったため、 'pip install requests [security]'は失敗していました。

私がしたOPの元の問題を解決するために:

1) pip install 'cryptography<1.3.5,>1.3.0'.  

これにより、openssl-0.9.8eで動作する暗号化方式1.3.4がインストールされました。次のコマンドの要件を満たすには、cryptograpy 1.3.4でも十分です。

2) pip install 'requests[security]'

暗号化> 1.4.0をインストールしようとしないため、このコマンドはインストールされます。

Centos 5では、次の作業も必要でした。

yum install openssl-devel

暗号化の構築を許可する

0
DavidG