SSL InsecurePlatform error when using Requests package
我使用Python 2.7.3和请求。 我通过pip安装了Requests。 我相信这是最新版本。 我正在使用Debian Wheezy。
我过去曾多次使用过Requests并且从未遇到过这个问题,但似乎在使用
错误提及
1 2 3 4 5 6 | /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并禁用警告或提供证书。
使用隐藏的安全功能:
要么
这两个命令安装以下额外的包:
- pyOpenSSL
- 加密
- IDNA
请注意,python-2.7.9 +不需要这样做。
如果
-
Debian / Ubuntu -
python-dev libffi-dev libssl-dev 包。 -
Fedora -
openssl-devel python-devel libffi-devel 包。
上面的发行清单不完整。
解决方法(参见@TomDotTom的原始答案):
如果您无法安装某些必需的开发包,还可以选择禁用该警告:
1 2 | import requests.packages.urllib3 requests.packages.urllib3.disable_warnings() |
如果您的
请求2.6为2.7.9之前的python用户引入了此警告,仅提供了库存SSL模块。
假设您无法升级到更新版本的python,这将安装更多最新的python SSL库:
1 | pip install --upgrade ndg-httpsclient |
但是,如果没有pyOpenSSL的构建依赖性,某些系统可能会失败。在debian系统上,在上面的pip命令之前运行它应该足以使pyOpenSSL构建:
1 | apt-get install python-dev libffi-dev libssl-dev |
我不是在生产中使用它,只是一些测试跑步者。并重申urllib3文档
If you know what you are doing and would like to disable this and
other warnings
1 2 | import requests.packages.urllib3 requests.packages.urllib3.disable_warnings() |
编辑/更新:
以下也应该有效:
1 2 3 4 5 | import logging import requests # turn down requests log verbosity logging.getLogger('requests').setLevel(logging.CRITICAL) |
事实上,你可以试试这个。
你可以阅读请求的代码。
equests\sessions.py"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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. ... """ |
如果您无法将Python版本升级到2.7.9,并且想要禁止警告,
您可以将"请求"版本降级到2.5.3:
1 | 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
这里给出的所有解决方案都没有帮助(我受限于python 2.6.6)。我在一个简单的开关中找到答案传递给pip:
1 | $ sudo pip install --trusted-host pypi.python.org <module_name> |
这告诉pip从pypi.python.org获取模块是可以的。
对我来说,问题是我公司的防火墙背后的代理,使它看起来像某些服务器的恶意客户端。万岁安全。
更新:请参阅@Alex的
回答PyPi域中的更改,以及可以添加的其他
这个答案是无关紧要的,但是如果你想摆脱警告并从请求中得到以下警告:
/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代码中添加以下行来禁用它:
上周我在Ubuntu 14.04(使用Python 2.7.6)之后找到了包含来自
由于我从cron作业运行
要修复错误,我需要做的就是成为root(使用
1 2 3 | sudo su --login /usr/local/bin/certbot-auto renew # ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ... |
而不是通常从root的crontab运行的东西:
1 | 5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade |
之后,letsencrypt renwals再次正常运行。
我必须先去
1 | sudo -H pip install 'requests[security]' --upgrade |
解决了这个问题。
如果你只想停止不安全的警告,例如:
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794:
InsecureRequestWarning: Unverified HTTPS request is being made. Adding
certificate verification is strongly advised. See:
https://urllib3.readthedocs.org/en/latest/security.html
InsecureRequestWarning)
做:
1 | requests.METHOD("https://www.google.com", verify=False) |
verify=False
是关键,以下不擅长:
requests.packages.urllib3.disable_warnings()
要么
urllib3.disable_warnings()
但是,您必须知道,这可能会带来潜在的安全风险。
不要安装pyOpenSSL,因为它很快就会被弃用。目前最好的方法是 -
1 2 | import requests requests.packages.urllib3.disable_warnings() |
以下是它在Python 3.6上的工作方式:
1 2 3 4 5 | import requests import urllib3 # Suppress InsecureRequestWarning: Unverified HTTPS urllib3.disable_warnings() |
我在CentOS 5服务器上遇到了类似的问题,我在/ usr / local中安装了python 2.7.12,它位于更旧版本的python2.7之上。此服务器目前无法升级到CentOS 6或7。
一些python 2.7模块仍然存在于较旧版本的python中,但是pip未能升级,因为CentOS 5软件包不支持更新的加密软件包。
具体来说,'pip安装请求[安全]'失败了,因为CentOS 5上的openssl版本是0.9.8e,密码学不再支持1.4.0。
为了解决OP的原始问题,我做了:
1 | 1) pip install 'cryptography<1.3.5,>1.3.0'. |
这个安装的加密1.3.4与openssl-0.9.8e一起使用。密码学1.3.4也足以满足以下命令的要求。
1 | 2) pip install 'requests[security]' |
此命令现在安装,因为它不会尝试安装加密> 1.4.0。
请注意,在Centos 5上我还需要:
1 | yum install openssl-devel |
允许加密构建
对我来说没有工作我需要升级点子....
于Debian / Ubuntu
安装依赖项
1 | sudo apt-get install libpython-dev libssl-dev libffi-dev |
升级pip并安装包
1 2 | sudo pip install -U pip sudo pip install -U pyopenssl ndg-httpsclient pyasn1 |
如果要删除依赖项
1 2 | sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev sudo apt-get autoremove |