我得到警告:
/.../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)
我在读the doc。在
我看到了很多关于如果我知道我在做什么的文章,比如this one。在
但我还是很难弄清楚这个错误意味着什么。我想这意味着我丢失了一个证书(因为它只发生在VPS上,而不是运行同一版本脚本的Mac上),但我不明白为什么我需要一个证书来向第三方API发出安全请求。在
一个有用的总结(或者仅仅是一个正确的方向)将非常感谢,这样我就可以决定是否禁用它。我的直觉是我不应该禁用它,所以我想知道如何正确地解决这个问题。在
我很高兴你没有简单地禁用警告。好问题,实际上!您缺少对信任链如何工作的基本理解。这不是一个耻辱,许多人不幸地不知道这一点。但是,作为开发人员,您需要了解基本知识,真的,请!继续,读一读这整件事是如何运作的。搜索引擎是你的朋友。在
简而言之,TLS加密旨在保证机密性、真实性和完整性。安全社区的常识是(*):没有证书验证您将得到这三个项目中的无,因为您很容易受到中间人攻击。也就是说,验证证书,或者干脆停止使用HTTPS。这就是警告的意义所在。在
更多的上下文:这种安全体系结构的一部分是远程主机声明拥有由信任链中更高层的人签名的证书,即所谓的certificate authority(CA)。客户机需要验证该CA是否确实对该证书进行了签名。为了使这个验证生效,客户机需要一个本地数据库,其中包含许多CA的“密钥”。在
请在其他地方阅读详细信息。但是,为了完整地回答这个问题,这是一个高级抽象,它应该澄清为什么需要一些外部信息源:
您可以使用^{} 库而不是urllib3,它在默认情况下执行证书验证(并提供自己的CA数据库)。在
(*)未验证的HTTPS连接可以比普通HTTP“更好”,但这需要根据具体情况进行评估。在
相关问题 更多 >
编程相关推荐