尽管有最新的依赖关系,但 Python 请求出现 SSL 错误

新手上路,请多包涵

我收到 SSL“握手错误”错误。对此问题的大多数类似响应似乎都源于旧库,1024 位证书。不兼容等…我 我是最新的,并且无法弄清楚为什么我会收到此错误。

设置:

  • 请求 2.13.0
  • 证书 2017.01.23
  • ‘OpenSSL 1.0.2g 2016 年 3 月 1 日’

我正在使用这个 API(2048 位证书密钥): https ://api.sidecar.io/rest/v1/provision/application/device/count/

并收到此错误: requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

参见 https://github.com/sidecar-io/sidecar-python-sdk/blob/master/sidecar.py 的 l.44

如果我在请求中转 verify=False ,我可以绕过,但我宁愿弄清楚为什么认证失败。

任何帮助是极大的赞赏;谢谢!

原文由 N. Masson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 400
1 个回答

验证失败是因为您访问的服务器设置不正确,即这不是您的设置或代码的错误。查看 SSLLabs 的报告, 您会看到

此服务器的证书链不完整。等级上限为 B。

这意味着服务器将缺少中间证书的证书链发送到受信任的根,因此您的客户端无法构建信任链。大多数桌面浏览器通过尝试从其他地方获取丢失的证书来解决这个问题,但在这种情况下普通的 TLS 库将失败。您需要将丢失的链证书显式添加为受信任的才能解决此问题:

 import requests
requests.get('https://api.sidecar.io', verify = 'mycerts.pem')

mycerts.pem 应该包含缺少的中间证书和受信任的根证书。 mycerts.pem 的测试版本可以在 http://pastebin.com/aZSKfyb7 中找到。

原文由 Steffen Ullrich 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题