使用Requests包时出现SSL InsecurePlatform错误

Luk*_*ham 234 python ssl python-requests

我使用Python 2.7.3和请求.我通过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.
Run Code Online (Sandbox Code Playgroud)

关于为什么我得到这个的任何想法?我已经检查了错误消息中指定的文档,但文档说要导入urllib3并禁用警告或提供证书.

pla*_*aes 388

使用隐藏的安全功能:

pip install requests[security] 要么 pip install pyOpenSSL ndg-httpsclient pyasn1

这两个命令安装以下额外的包:

  • pyOpenSSL
  • 加密
  • IDNA

请注意,python-2.7.9 +不需要这样做.

如果pip install失败并出现错误,请使用分发包管理器检查您是否需要开发包libffi,libsslpython在系统中安装:

  • 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()
Run Code Online (Sandbox Code Playgroud)

如果你pip自己受到InsecurePlatformWarningPyPI的影响并且无法安装任何东西,可以通过这个循序渐进的指南修复它,以手动部署额外的python包.

  • 你还需要在系统上为Ubuntu/Debian安装额外的库:`sudo apt-get install python-dev libffi-dev libssl-dev` (45认同)
  • 根据你的shell,你可能需要输入`pip install'requests [security]'` (5认同)
  • 在zshell中,您需要说:pip install requests \\ [security \\] (5认同)
  • 我有[安全],新终端,Python 2.7.3的请求,但仍然收到此错误 (3认同)
  • "pip"本身(从v6.1开始)是否可以提供相同的安全警告? (2认同)

小智 68

请求2.6为2.7.9之前的python用户引入了此警告,仅提供了库存SSL模块.

假设您无法升级到更新版本的python,这将安装更多最新的python SSL库:

pip install --upgrade ndg-httpsclient 
Run Code Online (Sandbox Code Playgroud)

但是,如果没有pyOpenSSL的构建依赖性,某些系统可能会失败.在debian系统上,在上面的pip命令之前运行它应该足以使pyOpenSSL构建:

apt-get install python-dev libffi-dev libssl-dev
Run Code Online (Sandbox Code Playgroud)

  • 我还需要为ubuntu 14.04安装这些软件包'python-dev libffi-dev libssl-dev'. (4认同)

Tom*_*Tom 19

我不是在生产中使用它,只是一些测试跑步者.并重申urllib3文档

如果您知道自己在做什么,并希望禁用此警告和其他警告

import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
Run Code Online (Sandbox Code Playgroud)

编辑/更新:

以下也应该有效:

import logging
import requests

# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
Run Code Online (Sandbox Code Playgroud)


rai*_*tes 7

如果您无法将Python版本升级到2.7.9,并且想要禁止警告,

您可以将"请求"版本降级到2.5.3:

sudo pip install requests==2.5.3
Run Code Online (Sandbox Code Playgroud)

关于版本:http: //fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

  • 请注意,2.5.3在重定向期间处理cookie时存在安全问题. (8认同)
  • 由于已知的漏洞,我的评论是*不降级*. (6认同)
  • 您应该将其他帖子标记为重复,而不是将此答案两次发布.我现在已经关闭了它. (2认同)

zzz*_*zzz 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.
    ...
    """
Run Code Online (Sandbox Code Playgroud)

  • 小心这样做,不验证证书是危险的! (2认同)

Pfu*_*Guy 5

这里给出的所有解决方案都没有帮助(我受限于python 2.6.6).我在一个简单的开关中找到答案传递给pip:

$ sudo pip install --trusted-host pypi.python.org <module_name>
Run Code Online (Sandbox Code Playgroud)

这告诉pip从pypi.python.org获取模块是可以的.

对我来说,问题是我公司的防火墙背后的代理,使它看起来像某些服务器的恶意客户端.万岁安全.