我正在编写一个涉及 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 许可协议
您遇到的问题是由不受信任的 SSL 证书引起的。
就像之前评论中提到的@dirk 一样, 最快 的解决方法是设置
verify=False
:请注意,这将导致无法验证证书。 这将使您的应用程序面临安全风险,例如中间人攻击。
当然,应用判断。正如评论中提到的,这对于快速/一次性应用程序/脚本来说 可能 是可以接受的, _但实际上不应该用于生产软件_。
如果在您的特定上下文中仅跳过证书检查是不可接受的,请考虑以下选项,您最好的选择是将
verify
参数设置为一个字符串,该字符串是.pem
的路径证书文件(您应该通过某种安全方式获得)。因此,从 2.0 版开始,
verify
参数接受以下值及其各自的语义:True
:使证书根据库自己的受信任证书颁发机构进行验证(注意:您可以通过 Certifi 库查看请求使用的根证书,这是从请求中提取的 RC 的信任数据库: Certifi - Trust Database for人类)。False
: 完全 绕过证书验证。资料来源: 请求 - SSL 证书验证
另请查看同一链接上的
cert
参数。