python - 为什么在请求 API 调用中使用 verify=True?
问题描述
因此,在requests
SSL 验证的情况下,我们通过verify=True
or verify='/path/to/cert
。根据文档,通过verify=True
意味着请求检查主机上的 SSL 证书。但是,如果为请求传递证书文件的路径verify
,它会考虑特定的证书文件来验证请求。
那么先通过有什么好处verify=True
呢?因为,即使我通过verify=False
了,它也能正常工作。早些时候,我以为它正在生成一个自签名证书,但我错了。任何帮助将不胜感激。
解决方案
在了解不同的价值观之前,verify
首先需要了解这verify
是什么。它是关于验证服务器证书是否与预期的证书匹配,这意味着与服务器存在直接的端到端保护连接,并且中间没有可以读取和修改流量的人。服务器验证(除其他外)基于代表受信任证书颁发机构 (CA) 的本地信任根证书:如果无法构建从服务器提供的叶证书到任何本地信任锚的链,则证书不可信. 有关这方面的更多信息,请参阅SSL 证书框架 101:浏览器如何实际验证给定服务器证书的有效性?.
verify=True
然后意味着服务器验证已完成以使用默认信任锚,它们通常与浏览器中使用的公共根证书相同。verify=file.pem
意味着不使用默认的信任锚,而只使用特定文件中给出的信任锚。这可以是单个 CA 证书,可以是多个 CA 证书,但也可以是特定服务器预期的自签名证书。这两个选项通常都足够安全。但是明确指定信任哪个 CA 或证书verify=file.pem
更具限制性,因此更安全。
verify=False
相反,意味着根本没有进行证书验证。这意味着不会检测到中间的人,因此中间的任何人都可以嗅探和摆弄交通。这是完全不安全的,绝不能用于关键数据。. 关键数据显然是密码或访问令牌之类的东西,但在许多情况下,即使公开访问的确切 URL 也被认为是关键数据。
推荐阅读
- android - LOTKeypath 不能在 ios 中工作,但在 Android 中工作正常
- cmake - 在 Embarcadero 中使用 CMake
- gradle - Gradle 的子项目依赖项失败
- python - 将数据帧写入 csv 时出错
- c# - 如何使用 jquery 设置 aspnet 下拉列表的选定值
- python - 累积和结转 - 用 pandas 向量化
- rest - 如何访问 Alexa 上本地托管的 REST API
- excel - Excel Web 加载项:如何检测功能区单击事件?
- sql-server - 用于更改现有数据库的 SQL Server 数据库项目
- visual-studio-code - VSCode 扩展不显示贡献