python - Python 请求模块中的 SSLError

标签 python ssl python-requests

我想使用从服务器生成的证书从我的客户端向服务器进行身份验证。我有一个 server-ca.crt,下面是正在运行的 CURL 命令。如何使用 python 请求模块发送类似的请求。

$ 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)

最佳答案

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

requests.get 中的cert 参数用于指定用于相互身份验证的客户端证书和 key 。它不像 curl 中的 --cacert 参数那样用于指定受信任的 CA。相反,您应该使用 verify 参数:

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

有关详细信息,请参阅 SSL Cert VerificationClient Side Certificates请求的文档中。

关于python - Python 请求模块中的 SSLError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110883/

相关文章:

python - 我试图向代理发送 python 请求,但失败了

javascript - NODE_TLS_REJECT_UNAUTHORIZED Heroku 应用程序使整个应用程序不安全

python - 流媒体上传请求?

python - 为什么我可以在 python 中从另一个模块访问一个模块中的非全局变量?

python - 确定图像中形状的轮廓

python - 是否有 NetworkX 算法可以找到从源到目标的最长路径?

android - Android 上的 SSLSocket 不会因服务器名称无效的证书而失败

java - 带有 Android 和自签名服务器证书的 HTTPS GET (SSL)

python - 如何解决重定向中的编码问题

带文件+数据的python POST请求