Python 请求抛出 SSLError

新手上路,请多包涵

我正在编写一个涉及 CAS、jspring 安全检查、重定向等的简单脚本。我想使用 Kenneth Reitz 的 python 请求,因为它是一项很棒的工作!但是,CAS 需要通过 SSL 进行验证,所以我必须先通过这一步。我不知道 Python 请求想要什么?这个 SSL 证书应该放在哪里?

 Traceback (most recent call last):
  File "./test.py", line 24, in <module>
  response = requests.get(url1, headers=headers)
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
  File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 209, in request
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 624, in send
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 300, in _build_response
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 611, in send
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

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

阅读 673
1 个回答

您遇到的问题是由不受信任的 SSL 证书引起的。

就像之前评论中提到的@dirk 一样, 最快 的解决方法是设置 verify=False

 requests.get('https://example.com', verify=False)

请注意,这将导致无法验证证书。 这将使您的应用程序面临安全风险,例如中间人攻击。

当然,应用判断。正如评论中提到的,这对于快速/一次性应用程序/脚本来说 可能 是可以接受的, _但实际上不应该用于生产软件_。

如果在您的特定上下文中仅跳过证书检查是不可接受的,请考虑以下选项,您最好的选择是将 verify 参数设置为一个字符串,该字符串是 .pem 的路径证书文件(您应该通过某种安全方式获得)。

因此,从 2.0 版开始, verify 参数接受以下值及其各自的语义:

  • True :使证书根据库自己的受信任证书颁发机构进行验证(注意:您可以通过 Certifi 库查看请求使用的根证书,这是从请求中提取的 RC 的信任数据库: Certifi - Trust Database for人类)。
  • False完全 绕过证书验证。
  • 请求用于验证证书的 CA_BUNDLE 文件的路径。

资料来源: 请求 - SSL 证书验证

另请查看同一链接上的 cert 参数。

原文由 Rafael Almeida 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题