Python InsecureRequestWarning到底是什么意思?

问题描述 投票:4回答:1

我收到了这个警告。

/.../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)

我正在阅读 医生.

我看到了很多关于如何禁用它的帖子,如果我知道我在做什么,像 这个.

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

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

python ssl-certificate urllib3
1个回答
9
投票

我很高兴你没有简单地禁用警告。其实,这个问题很好! 这里需要的是基本的了解如何在 "信任链" 正在工作。这并不可惜,很多人没有这方面的知识。但是,作为一个开发者,应该知道基本的知识! 去吧,也许可以读一读整个事情是如何工作的。

简而言之,TLS是为了保证 保密性、真实性和完整性. 安全界的常识是(*):没有证书。核查 你得到 的这三条,因为你很容易受到中间人攻击。也就是验证证书,否则你还不如停止使用HTTPS。这就是警告的内容。

更多的背景:这个安全架构的一部分是,远程主机上的 索赔 拥有证书 经手人,所谓的 证书颁发机构 (CA)。客户需要 验证 这个CA确实签署了该证书。为了使这种验证有效,客户端需要一个本地数据库,里面有很多CA的公钥(把这些公钥看作是 "信任锚",其集合可以称为 "证书捆绑")。

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

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

  • 你的客户 不信 远程端。
  • 所以,你的客户需要涉及到第三方,询问远程端的可信度。
  • 这个第三方就是你本地的很多CA的公钥数据库,也就是所谓的 "证书捆绑"。

你可以用 requests 库而不是 urllib3,它默认执行证书验证(并提供自己的 CA 数据库)。

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

© www.soinside.com 2019 - 2024. All rights reserved.