我正在编写一个简单的脚本,涉及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
您遇到的问题是由不受信任的SSL证书引起的。
就像之前的评论中提到的@dirk一样,最快的修复方法是设置verify=False:
requests.get('https://example.com', verify=False)
请注意,这将导致无法验证证书。这将使您的应用程序面临安全风险,例如中间人攻击。
当然,要有判断力。正如评论中提到的,这对于快速/一次性应用程序/脚本可能是可以接受的,但真的不应该用于生产软件。
如果仅仅跳过证书检查在您的特定上下文中是不可接受的,请考虑以下选项,最好的选项是将verify参数设置为一个字符串,该字符串是证书的.pem文件的路径(您应该通过某种安全方法获取该文件)。
因此,从2.0版本开始,verify形参接受以下值,并具有各自的语义:
True:使证书针对库自己的受信任证书颁发机构进行验证(注意:您可以通过Certifi库查看请求使用的根证书,Certifi库是从Requests: Certifi - trust database for Humans中提取的rc的信任数据库)。
False:完全跳过证书验证。
请求用来验证证书的CA_BUNDLE文件的路径。
来源:请求- SSL证书验证
还可以查看同一链接上的cert参数。
您遇到的问题是由不受信任的SSL证书引起的。
就像之前的评论中提到的@dirk一样,最快的修复方法是设置verify=False:
requests.get('https://example.com', verify=False)
请注意,这将导致无法验证证书。这将使您的应用程序面临安全风险,例如中间人攻击。
当然,要有判断力。正如评论中提到的,这对于快速/一次性应用程序/脚本可能是可以接受的,但真的不应该用于生产软件。
如果仅仅跳过证书检查在您的特定上下文中是不可接受的,请考虑以下选项,最好的选项是将verify参数设置为一个字符串,该字符串是证书的.pem文件的路径(您应该通过某种安全方法获取该文件)。
因此,从2.0版本开始,verify形参接受以下值,并具有各自的语义:
True:使证书针对库自己的受信任证书颁发机构进行验证(注意:您可以通过Certifi库查看请求使用的根证书,Certifi库是从Requests: Certifi - trust database for Humans中提取的rc的信任数据库)。
False:完全跳过证书验证。
请求用来验证证书的CA_BUNDLE文件的路径。
来源:请求- SSL证书验证
还可以查看同一链接上的cert参数。