Python requests模块中的SSLError

3
我想使用服务器生成的证书从客户端认证到服务器。我有一个 server-ca.crt 文件,并且下面是有效的 CURL 命令。请问如何使用 Python requests 模块发送相似的请求?
$ curl -X GET -u sat_username:sat_password \
-H "Accept:application/json" --cacert katello-server-ca.crt \
https://satellite6.example.com/katello/api/organizations

我已经尝试了以下方法,但出现了一些异常,有人可以帮助解决这个问题吗?

 python requestsCert.py
Traceback (most recent call last):
  File "requestsCert.py", line 2, in <module>
    res=requests.get('https://satellite6.example.com/katello/api/organizations', cert='/certificateTests/katello-server-ca.crt', verify=True)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 68, in get
    return request('get', url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 464, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL] PEM lib (_ssl.c:2554)

紧密相关:https://dev59.com/_F0a5IYBdhLWcg3woJ55 但我不确定这是一个重复的问题,因为在这个问题中,错误是在“requests”代码中引发的,而在另一个问题中,“requests”没有涉及。 - David Z
1个回答

4
res=requests.get('https://...', cert='/certificateTests/katello-server-ca.crt', verify=True)

requests.get 中的 cert 参数用于指定应用于双向身份验证的客户端证书和密钥。它不用于指定信任的 CA,类似于 curl 中的 --cacert 参数。相反,您应该使用 verify 参数:

res=requests.get('https://...', verify='/certificateTests/katello-server-ca.crt')

有关更多信息,请参见requests文档中的SSL证书验证客户端证书


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接