抑制InsecureRequestWarning:未经validation的HTTPS请求正在Python2.6中进行

我正在使用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/中 )。

我按照这里的build议尝试过

 import urllib3 ... urllib3.disable_warnings() 

但是这并没有改变任何东西。

更新(2017-07-28):如果您使用的是这些库的现代版本,则可能不再有售。 如果是这样的话,那么你只需要做:

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

如果你仍然使用一个供应商urllib3里面的请求(像原来的问题),那么你可以使用下面的原始答案:

原始答案:

urllib3.disable_warnings()的原因不适合你,因为它看起来像你在请求内部使用单独的urllib3实例。

我收集这里的path在这里: /usr/lib/python2.6/site-packages/requests/packages/urllib3/connectionpool.py

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

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

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

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

正确的方法是阅读提供的链接上的相关部分,并按照说明进行操作。 按照CA证书 – 高级用法 – 请求2.8.1文档 ,特定于requests (与自己的urllib3副本捆绑在一起)的方式:

  • requests附带自己的证书包(但只能与模块一起更新)
  • 它会使用(自requests v2.4.0certifi包,而不是安装

HTTPS证书validation安全措施不是轻易被丢弃的东西。 中间人攻击,它阻止了你从第三方,例如啜饮病毒或篡改或窃取你的数据。

其中,以今天的政府支持的全球黑客行动(如定制访问操作和中国的长城防火墙)为目标的networking基础设施,比您想象的要更有可能。

根据这个github的评论,可以通过urllib3请求来禁用urllib3请求:

requests.packages.urllib3.disable_warnings()

这将会压制所有的警告,而不仅仅是InsecureRequest (也就是也会压制InsecurePlatform等)。 如果我们只是想要东西的工作,我发现简洁得心应手。

我和PyVmomi客户端有类似的问题。 使用Python版本2.7.9,我已经用下面这行代码解决了这个问题:

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

请注意,为了这个工作,你至less需要Python 2.7.9。

为什么不使用pyvmomi 原来的function SmartConnectNoSSL 。 他们在14 Jun 2016 添加了这个函数,并且在将名称更改为SmartConnectNoSSL 后的一天将其命名为ConnectNoSSL ,而不是通过在项目中传递不必要的代码行来使用该函数?

提供一种标准方法,用于连接到未经SSLvalidation的指定服务器。 连接到具有自签名证书的服务器或者希望完全忽略SSL时很有用

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

解决了我的MacBook上的问题:

 pip install certifi 

要么

 pip3 install certifi