抑制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.0
)certifi
包,而不是安装
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