2017-11-18 175 views
0

我想從我的客戶端使用從server生成的證書向服務器進行身份驗證。我有一個server-ca.crt,下面是正在工作的CURL命令。如何使用發送類似請求python請求模塊。Python請求模塊中的SSLError模塊

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

密切相關:https://stackoverflow.com/questions/30109449/what-does-sslerror-ssl-pem-lib-ssl-c2532-mean-using-the-python-ssl-libr但我不是肯定這是重複的,因爲在這個問題中,錯誤在'request'代碼中引發,而在另一個問題中,'requests'沒有涉及。 –

回答

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

cert論點requests.get用於指定應該用於相互認證的客戶端證書和密鑰。它不用於指定受信任的CA,因爲curl中的--cacert參數確實如此。相反,你應該使用verify參數:

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

欲瞭解更多信息,請參閱SSL Cert VerificationClient Side Certificates文檔中的requests