查看: 1905|回复: 3

requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routin...

[复制链接]

4

主题

33

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2018-9-19 14:30:53 | 显示全部楼层 |阅读模式
我正在研究一个涉及CAS,jspring安全检查,重定向等的简单脚本。CAS需要通过SSL进行验证,因此我必须先通过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
回复

使用道具 举报

22

主题

107

帖子

266

积分

中级会员

Rank: 3Rank: 3

积分
266
发表于 2018-9-19 14:36:15 | 显示全部楼层
你遇到的问题是由不受信任的SSL证书引起的。
最快的方法是设置verify=False:
requests.get('https://example.com', verify=False)
请注意,这将导致证书无法验证。这将使你的应用程序面临安全风险,例如中间人攻击。
这对于快速/一次性应用程序/脚本来说可能是可以接受的,但实际上不应该是面向商业程序的选择。另一个选择是将verify参数设置为字符串,该字符串是.pem证书文件的路径(你应该通过某种安全方式获取该文件的路径)。
因此,从2.0版开始,该verify参数接受以下值及其各自的语义:
•        True:使证书针对库自己的可信证书颁发机构进行验证(注意:你可以通过Certifi库查看哪些根证书请求使用,这是从请求中提取的RC信任数据库:Certifi - 人类信任数据库)。
•        False:完全绕过证书验证。
•        用于验证证书的请求的CA_BUNDLE文件的路径。
来源:请求 - SSL证书验证
回复

使用道具 举报

15

主题

97

帖子

310

积分

论坛管理

Rank: 4

积分
310
发表于 2018-9-19 14:37:19 | 显示全部楼层
请求可以验证HTTPS请求的SSL证书,就像Web浏览器一样。要检查主机的SSL证书,可以使用verify参数:
>>> requests.get('https://kennethreitz.com', verify=True)
如果你不想验证你的SSL证书,请制作 verify=False
回复

使用道具 举报

4

主题

37

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2018-9-19 14:46:14 | 显示全部楼层
cafile = 'cacert.pem' # http://curl.haxx.se/ca/cacert.pem
r = requests.get(url, verify=cafile)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表