InsecurePlatformWarning:真正的 SSLContext 对象不可用。这会阻止 urllib3 正确配置 SSL [重复]

Posted

技术标签:

【中文标题】InsecurePlatformWarning:真正的 SSLContext 对象不可用。这会阻止 urllib3 正确配置 SSL [重复]【英文标题】:InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately [duplicate] 【发布时间】:2015-05-21 23:20:19 【问题描述】:

尝试使用以下代码通过 python 请求执行 REST GET,但出现错误。

代码片段:

import requests
header = 'Authorization': 'Bearer...'
url = az_base_url + az_subscription_id + '/resourcegroups/Default-Networking/resources?' + az_api_version
r = requests.get(url, headers=header)

错误:

/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.
  InsecurePlatformWarning

我的 python 版本是 2.7.3。我尝试按照其他线程的建议安装 urllib3 和 requests[security],但仍然遇到同样的错误。

想知道是否有人可以提供一些提示?

【问题讨论】:

您是否阅读了链接 (urllib3.readthedocs.org/en/latest/…)?它给出了两个建议:要么升级到至少 Python 2.7.9,要么使用 pyOpenSSL。 感谢您的 cmets。我尝试安装 pyOpenSSL 但失败了。让我尝试升级到 2.7.9,看看是否能解决问题。 @user4525298 是否通过升级 2.7.9 解决了您的问题? @NedDeily:链接现在已断开 @Sheena:谢谢。 urllib3.readthedocs.io/en/latest/… 【参考方案1】:

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

您可以将您的“请求”版本降级到 2.5.3:

pip install requests==2.5.3

Bugfix disclosure/Warning introduced in 2.6.0

【讨论】:

虽然这有效,但这可能不是最佳答案。 这个差异隐藏了 2.6.0 包含一个安全修复的事实;降级会让你暴露。 admdrew 对上述答案的评论是一个更好、更简单的解决方案。只需pip install requests[security] 对于大多数情况,上述答案可能会更好,但这个答案是唯一一个可以在具有您无法控制的本机库的共享主机上工作的答案。 requests[security] 无效,但旧版本有效。 如果 pip 本身 受到InsecurePlatformWarning 的影响并且无法从PyPI 安装任何东西,则可以使用this step-by-step guide 进行修复——对于较旧的Linux 系统很方便。@Brian 【参考方案2】:

The docs give a fair indicator of what's required.,但是requests 允许我们跳过几个步骤:

您只需要安装securitypackage extras(感谢@admdrew 指出)

$ pip install requests[security]

或者,直接安装它们:

$ pip install pyopenssl ndg-httpsclient pyasn1

Requests will then automatically inject pyopenssl into urllib3


如果您在 ubuntu 上,安装 pyopenssl 时可能会遇到问题,您将需要这些依赖项:

$ apt-get install libffi-dev libssl-dev

【讨论】:

你也可以pip install requests[security],只能import requests 上面的答案很详细,但是@admdrew 提供了可能是最简单的解决方案,而且头痛最少。 不要忘记--upgrade 选项,否则您可能不会实际安装任何东西。如果您希望您的系统环境安全,您需要 sudo 安装。所以 sudo pip install --upgrade pyopenssl ndg-httpsclient pyasn1 pip 在 Fedora 20 上为我工作,尽管卸载和升级 distutils 安装的 pyopenssl 软件包的弃用警告。 @hobs 关于sudo pip install,例如***.com/questions/29310688/… 作为一般但并非牢不可破的规则,您应该使用 pip install --user 或最好使用 virtualenv 来保留所有内容并固定。 另外,如果您在安装 Ubuntu 依赖项时遇到问题(我曾经遇到过),这里有更完整的描述:***.com/questions/22073516/…(答案很远)

以上是关于InsecurePlatformWarning:真正的 SSLContext 对象不可用。这会阻止 urllib3 正确配置 SSL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

python解决SNIMissingWarning和InsecurePlatformWarning警告

InsecurePlatformWarning:真正的 SSLContext 对象不可用。这会阻止 urllib3 正确配置 SSL [重复]

解决:python爬取https站点时SNIMissingWarning和InsecurePlatformWarning

python https协议和InsecurePlatformWarning问题

pip安装模块警告InsecurePlatformWarning: A true SSLContext object is not available.

禁止requests请求https的提示InsecurePlatformWarning: A true SSLContext object is not available. This prevent