リクエストパッケージの使用時のSSL InsecurePlatformエラー


237

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

私は過去に何度要求の多くを使用して、この問題に直面したことはありませんが、HTTPSでリクエスト作るときと思われてきたRequests私が得る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をインポートして警告を無効にするか、証明書を提供するように言っています。

回答:


390

やや隠されたセキュリティ機能を使用します。

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

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

  • pyOpenSSL
  • 暗号
  • イドナ

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

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

  • Debianの / Ubuntuの - python-dev libffi-dev libssl-devパッケージ。

  • Fedoraの - openssl-devel python-devel libffi-develのパッケージ。

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

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

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

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

あなたpip自身がInsecurePlatformWarningPyPIの影響を受けてインストールできない場合は、このステップバイステップガイドで修正して追加のPythonパッケージを手動でデプロイできます。


3
リクエスト[セキュリティ]、新しいターミナル、Python 2.7.3があり、それでもこのエラーが発生する
Josh Nankin

45
あなたもUbuntuの/ Debian用システム上で追加のライブラリをインストールする必要がありますsudo apt-get install python-dev libffi-dev libssl-dev
therealmarv

2
「pip」自体(v6.1以降)が同じセキュリティ警告を表示しても問題ありませんか?
jmster

5
シェルによっては、次のように入力する必要がありますpip install 'requests[security]'
C. Reed

5
zshellでは、次のように言う必要があります。pipinstall requests \ [security \]
Amir Katz

68

リクエスト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

4
これらのパッケージ 'python-dev libffi-dev libssl-dev'をubuntu 14.04にもインストールする必要がありました。
アンディ

ありがとう!ドキュメントにメモを追加しました:github.com/shazow/urllib3/pull/765
Wolfgang

@ジェシカFTW!どうもありがとう-これは迷惑でした。
Neal Magee

18

私はこれを本番環境では使用せず、一部のテストランナーのみを使用します。そして、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)

1
このソリューションの問題は、実際の問題を単に抑制して無視することです。さらに、pipを使用してパッケージをインストールまたはアップグレードする場合、これは機能しません。
Jason Parham 2016年

1
ubuntu 1404 / Python 2.7.6で動作する唯一のソリューション。ありがとう
Ignacio Vazquez

7

あなたがいる場合は、アップグレードすることはできません 2.7.9へのあなたのPythonのバージョンを、そして抑制の警告にしたいです、

「リクエスト」バージョンを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


8
2.5.3には、リダイレクト中のCookie処理に関するセキュリティの問題があることに注意してください。
2015年

2
この回答を2回投稿するのではなく、もう1つの投稿に重複のフラグを付けてください。そのように閉じました。
Martijn Pieters

6
既知の脆弱性のためにダウングレードないようにコメントを2番目に述べます。
sergiopereira 2015年

7

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

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.
    ...
    """

2
証明書を検証しないと危険な場合があるため、これを行う際は十分注意してください。
jaapz

もちろん、証明書を検証しないことは危険です。しかし、時々、これは最後の手段です。例:easy_install、apt-get、yumまたはpip ...実行しない、または少しWebクローラーを実行する...
zzzz zzzz

1
私は共有ホスティング環境にいるので、pythonを2.7.9にアップグレードできません。また、pipインストール要求[セキュリティ]と他のpipインストールバリアントで必要なapt-getを使用してlibffi.pcをインストールできません。上記。だから、この答えは私のために働いたものでした。httpsの検証なしではページのコンテンツが変更または偽装される可能性があるという重要な警告を理解している限り、この答えは問題ないと思います。
キラエル

5

ここに記載されているすべてのソリューションは役に立ちませんでした(私はpython 2.6.6に制限されています)。私はpipに渡す簡単なスイッチで答えを見つけました:

$ sudo pip install --trusted-host pypi.python.org <module_name>

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

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


更新:PyPiドメインの変更、および追加できる追加オプションについては、@ Alex の回答を参照してください --trusted-host。(ここにコピー/貼り付けますが、彼の答えなので、+ 1します)


このコマンドを使用して、ようやくtensorflowをインストールできました。
pedrobisp 2017年

3

この回答は無関係ですが、警告取り除き、リクエストから次の警告を受け取りたい場合:

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コードに追加することで無効にできます。

requests.packages.urllib3.disable_warnings()


これをありがとう。他の答えはどれもうまくいきませんでした。そのような冗長で迷惑なメッセージがデフォルトで入れられることに私は驚いています。
Dan


1

これは、先週、Ubuntu 14.04(Python 2.7.6を使用)で私がからapt-get dist-upgradeインクルードしたものを実行した後に思い付きました。libssl1.1:amd64deb.sury.org

certbot-auto renewはcronジョブから実行するため、--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 ...

ルートのcrontabから通常実行されるものの代わりに:

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

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


ここで説明されているのと同じ問題が発生しました。警告:/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122:InsecurePlatformWarning:真のSSLContextオブジェクトは利用できません。これにより、urllib3がSSLを適切に構成できなくなり、特定のSSL接続が失敗する可能性があります。これを解決するには、新しいバージョンのPythonにアップグレードします。詳細については、urllib3.readthedocs.io / en / latest /…を参照してください。InsecurePlatformWarning次のコマンドを入力するだけです:sudo apt-get dist-upgradeエラーが修正されました。
Didierh

0

私にとっては、私は仕事をアップグレードする必要はありません...

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

CentOS 5サーバーで同様の問題が発生しましたが、/ usr / localのpython2.7のはるか古いバージョンの上にpython 2.7.12をインストールしました。現在、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'.  

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

2) pip install 'requests[security]'

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

Centos 5では、次のことも行う必要があることに注意してください。

yum install openssl-devel

暗号化の構築を許可するには


0

以下は、Python 3.6での動作です。

import requests
import urllib3

# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()

0

pyOpenSSLはすぐに非推奨になるため、インストールしないでください。現在の最善のアプローチは

import requests
requests.packages.urllib3.disable_warnings()

0

あなたが安全でない警告を止めたいだけなら:

/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


Mac
Pycharmコミュニティエディション2019.3
Pythonインタープリター3.6 でも同じ問題が発生しました。
20.0.2でpipをアップグレードするとうまくいきました。
Pycharm --> Preferences --> Project Interpreter --> click on pip --> specify version 20.0.2 --> Install package

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.