【发布时间】:2018-12-25 17:19:05
【问题描述】:
我正在使用请求来访问 RESTful API。一切似乎都奏效了。我可以进行身份验证、拉回会话令牌,甚至可以对我为 API 编写的类中的方法进行单元测试。然后我尝试运行我的代码。
首先,这是我要打的电话。标头是在 init() 中设置的静态会话相关项。正文是根据文件中的数据动态构建的,并传递给此函数。所有数据均有效。
response = requests.post(url, headers=(Requestheader), data=json.dumps((Requestbody)))
当我运行代码时,它会使用我提供的元数据更新超过 100 条记录。在第 150 项附近的某处,我得到以下信息:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书中的自签名证书 链 (_ssl.c:1045)
我的第一步是打电话给供应商,看看他们所有的网络服务器是否都正确签署了证书,以为他们正在对我进行负载平衡,我发现了一个配置错误的服务器。他们告诉我事实并非如此。
然后我google了一下消息,发现有一个verify kwarg,于是我试了一下:
response = requests.post(url, headers=Requestheader, data=json.dumps(Requestbody), verify=False)
我知道这不是理想的长期,但我想测试它以查看行为是否相同。它做了同样的事情。它运行了一段时间并抛出了 ssl 错误。我认为 verify=False 的想法是它不会检查。
供应商建议我检查我正在使用的网址,但没关系。我想如果有代理服务器或真正的中间人攻击导致问题,我不会在失败之前多次看到成功。我想这可能是会话超时,但这应该会引发 401 状态,并且我的活动级别对于不活动超时来说太高了。
我是 python 菜鸟,不是安全专家。建议表示赞赏。
【问题讨论】:
-
requests的哪个版本?您应该尝试添加更多调试或捕获流量以查看您获得的每个证书,并查看哪些更改。verify=False在任何情况下都不应该被保留。
标签: python-3.x ssl openssl python-requests