抑制InsecureRequestWarning:在Python2.6中进行未验证的HTTPS请求

时间:2015-01-16 10:07:20

标签: python python-2.6 suppress-warnings urllib3 pyvmomi

我使用pyVmomi在使用其中一种连接方法时在Python2.6中编写脚本:

service_instance = connect.SmartConnect(host=args.ip,
                                        user=args.user,
                                        pwd=args.password)

我收到以下警告:

/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py:734: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

有趣的是,我没有使用pip安装urllib3(但它位于 /usr/lib/python2.6/site-packages/requests/packages/urllib3/ )。

我按照建议尝试here

import urllib3
...
urllib3.disable_warnings()

但这并没有改变任何事情。

13 个答案:

答案 0 :(得分:593)

您可以通过PYTHONWARNINGS环境变量禁用任何Python警告。在这种情况下,您需要:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

禁用Python代码(requests >= 2.16.0):

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

对于requests < 2.16.0,请参阅下面的原始答案。

原始回答

执行urllib3.disable_warnings()的原因对你不起作用是因为看起来你在请求中使用了一个独立的urllib3实例。

我根据此处的路径收集此信息:/usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

要禁用请求'vendored urllib3中的警告,您需要导入该模块的特定实例:

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

答案 1 :(得分:83)

这是2017年的答案。urllib3不再是requests的一部分

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

答案 2 :(得分:26)

正确的方法是阅读the relevant section on the provided link并按照说明行事。根据{{​​3}} requests(与urllib3的副本捆绑在一起)的具体方式:

  • requests附带自己的证书包(但只能与模块一起更新)
  • 如果已经安装
  • ,它将使用(自requests v2.4.0 certifi

HTTPS证书验证安全措施不能轻易放弃。中间人攻击,它阻止你保护你免受第三方的攻击,例如中啜饮病毒或篡改或窃取您的数据。

当今政府支持的全球黑客行为(如CA Certificates — Advanced Usage — Requests 2.8.1 documentationTailored Access Operations针对网络基础设施)比你想象的更可能。

答案 3 :(得分:23)

根据this github条评论,您可以通过{1}中的urllib3禁用requests请求警告:

requests.packages.urllib3.disable_warnings()

这会抑制所有警告,而不仅仅是InsecureRequest(即它还会抑制InsecurePlatform等)。在我们只是想要工作的情况下,我发现简洁方便。

答案 4 :(得分:8)

对于不耐烦,快速禁用python unverified HTTPS警告的方法:

export PYTHONWARNINGS="ignore:Unverified HTTPS request"

答案 5 :(得分:3)

如果某些软件包供应商拥有自己的urllib3副本,则可接受的答案不起作用,在这种情况下,它仍然有效:

import warnings

warnings.filterwarnings('ignore', message='Unverified HTTPS request')

答案 6 :(得分:1)

我与PyVmomi客户端有类似的问题。在Python版本2.7.9中,我使用以下代码行解决了这个问题:

default_sslContext = ssl._create_unverified_context()
self.client = \
                Client(<vcenterip>, username=<username>, password=<passwd>,
                       sslContext=default_sslContext )

请注意,要实现此目的,您至少需要Python 2.7.9。

答案 7 :(得分:1)

为什么不使用pyvmomi original function SmartConnectNoSSL。 他们June 14, 2016将此功能added命名为ConnectNoSSLone day after他们将名称更改为SmartConnectNoSSL,而不是通过不必要的行传递警告您项目中的代码?

  

提供连接到没有SSL的指定服务器的标准方法      验证。连接到具有自签名证书的服务器时很有用      或当您希望完全忽略SSL时

service_instance = connect.SmartConnectNoSSL(host=args.ip,
                                             user=args.user,
                                             pwd=args.password)

答案 8 :(得分:1)

警告信息

<块引用>

~/venv/lib/python3.4/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: 正在发出未经验证的 HTTPS 请求。强烈建议添加证书验证。见:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings 不安全请求警告)

在 Debian 8 中,此步骤有效

  1. 在python3代码中
import urllib3
urllib3.disable_warnings()
  1. 在 Debian 上安装两个软件包
<块引用>

libssl1.0.0_1.0.2l-1_bpo8+1_amd64.deb

<块引用>

libssl-dev_1.0.2l-1_bpo8+1_amd64.deb

debian mirror

使用新库构建依赖

  1. 为 python 项目创建新的 venv
python3 -m venv .venv
source .venv/bin/activate

在虚拟环境中的python项目下清洁安装模块

python3 -m pip install -e .

答案 9 :(得分:1)

对于 Python 3.7.9requests 2.11.1,这是在 OP 中抑制特定异常的唯一方法:

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

不知道为什么上面的方法有效而这个无效:

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

这是工作版本的简化:

from requests.packages import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

... 看起来 urllib3 的直接导入不包含与 requests 加载的命名空间相同的命名空间,因此 disable_warnings 不会改变所触及的数据结构来自requests

答案 10 :(得分:0)

Python 2.7

将环境变量PYTHONWARNINGS添加为键,并将相应的值添加为:

os.environ['PYTHONWARNINGS']="ignore:Unverified HTTPS request"

答案 11 :(得分:0)



使用标准 python 库“logging”抑制日志


将此代码放在现有代码的顶部

import logging
urllib3_logger = logging.getLogger('urllib3')
urllib3_logger.setLevel(logging.CRITICAL)

答案 12 :(得分:-10)

解决了我MacBook上的问题:

pip install certifi

pip3 install certifi