首页 > 解决方案 > 为什么在请求 API 调用中使用 verify=True?

问题描述

因此,在requestsSSL 验证的情况下,我们通过verify=Trueor verify='/path/to/cert。根据文档,通过verify=True意味着请求检查主机上的 SSL 证书。但是,如果为请求传递证书文件的路径verify,它会考虑特定的证书文件来验证请求。

那么先通过有什么好处verify=True呢?因为,即使我通过verify=False了,它也能正常工作。早些时候,我以为它正在生成一个自签名证书,但我错了。任何帮助将不胜感激。

标签: pythonsslpython-requests

解决方案


在了解不同的价值观之前,verify首先需要了解这verify是什么。它是关于验证服务器证书是否与预期的证书匹配,这意味着与服务器存在直接的端到端保护连接,并且中间没有可以读取和修改流量的人。服务器验证(除其他外)基于代表受信任证书颁发机构 (CA) 的本地信任根证书:如果无法构建从服务器提供的叶证书到任何本地信任锚的链,则证书不可信. 有关这方面的更多信息,请参阅SSL 证书框架 101:浏览器如何实际验证给定服务器证书的有效性?.

verify=True然后意味着服务器验证已完成以使用默认信任锚,它们通常与浏览器中使用的公共根证书相同。verify=file.pem意味着不使用默认的信任锚,而只使用特定文件中给出的信任锚。这可以是单个 CA 证书,可以是多个 CA 证书,但也可以是特定服务器预期的自签名证书。这两个选项通常都足够安全。但是明确指定信任哪个 CA 或证书verify=file.pem更具限制性,因此更安全。

verify=False相反,意味着根本没有进行证书验证。这意味着不会检测到中间的人,因此中间的任何人都可以嗅探和摆弄交通。这是完全不安全的,绝不能用于关键数据。. 关键数据显然是密码或访问令牌之类的东西,但在许多情况下,即使公开访问的确切 URL 也被认为是关键数据。


推荐阅读