Python不安全请求警告的真正含义是什么?

Python不安全请求警告的真正含义是什么?,python,ssl-certificate,urllib3,Python,Ssl Certificate,Urllib3,我得到了警告: /.../local/lib/python2.7/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/

我得到了警告:

/.../local/lib/python2.7/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)
我在看书

我看到很多关于如何禁用它的帖子,如果我知道我在做什么,比如

但我还是很难弄清楚错误的含义。我推测这意味着我丢失了一个证书(因为它只发生在我的VP上,而不是在运行相同版本脚本的Mac上),但我不明白为什么我需要一个证书来向第三方API发出安全请求


如果能提供一个有用的总结(或者仅仅是正确方向上的一点),我将不胜感激,这样我就可以决定是否禁用它。我的直觉是我不应该禁用它,所以我想知道如何正确地解决这个问题。

我很高兴你没有简单地禁用警告。真是个好问题!这里需要的是对“信任链”如何运作的基本理解。这并不丢人,许多人对此一无所知。但是,作为一名开发人员,您应该了解基础知识!继续,也许读一读整个事情是如何运作的

简而言之,TLS旨在保证保密性、真实性和完整性。安全社区中的常识是:(*):如果没有证书验证,那么这三个条目中的“强”>“不”/“强”,因为您在中间攻击中易受攻击。也就是说,验证证书,或者您也可以停止使用HTTPS。这就是警告的内容

更详细一点:这种安全体系结构的一部分是远程主机声称拥有一个由信任链中较高的人签名的证书,即所谓的(CA)。客户端需要验证该CA是否确实签署了该证书。为了使这种验证能够工作,客户机需要一个本地数据库,其中包含许多CA的公钥(将其视为“信任锚”,其集合可以称为“证书束”)

我不明白为什么我需要证书来进行安全请求 到第三方API

请阅读其他地方的详细信息。但是,为了这个答案的完整性,这是一个高层抽象,应该澄清为什么需要一些外部信息源:

  • 您的客户端不信任远程端
  • 因此,您的客户需要让第三方参与进来,并询问远程端的可信度
  • 第三方是许多CA的公钥的本地数据库,即所谓的“证书包”
您可以使用库而不是urllib3,它默认执行证书验证(并提供自己的CA数据库)


(*)未经验证的HTTPS连接可能比普通HTTP“更好”,但这需要根据具体情况进行评估。

非常有用,谢谢。请求库不是在后台使用urllib3吗?如果不进一步查看,该警告将跟踪到一个似乎位于请求包中的模块。我认为它确实存在。
请求的高级HTTP方法
有一个
verify
参数,默认设置为
True
。使用
请求
时,未经验证的连接应引发
请求。异常。SSLError
,而不仅仅是打印警告。是的,请求使用urllib3。事实上,op似乎已经在使用请求了。你说得对,我们可以增加更多关于如何决定你是否应该关心的指导。我欢迎您提出问题或请求,并提出建议。主要问题是:您是否确信您未经验证的连接不会被监视或干扰?例如,如果它仅在本地专用网络中执行,而不暴露于外部互联网。我向第三方API发出请求,因此我假设这意味着它不仅在本地专用网络中执行,而且暴露于外部互联网。“看来我最好进一步研究一下。”沙佐:现在,如果他在使用请求,会不会出现异常而不是打印警告?