2013-07-10 6 views
9

Sto chiamando un'API REST con richieste in python e finora ho avuto successo quando ho impostato verify=False.Richieste Python - Errore SSL per CERT lato client

Ora, devo usare il CERT lato client che devo importare per l'autenticazione e sto ricevendo questo errore ogni volta che sto usando il cert (.pfx). cert.pfx è protetto da password.

r = requests.post(url, params=payload, headers=headers, 
        data=payload, verify='cert.pfx') 

Questo è l'errore che sto ricevendo:

Traceback (most recent call last): 
File "C:\Users\me\Desktop\test.py", line 65, in <module> 
r = requests.post(url, params=payload, headers=headers, data=payload, verify=cafile) 
File "C:\Python33\lib\site-packages\requests\api.py", line 88, in post 
return request('post', url, data=data, **kwargs) 
File "C:\Python33\lib\site-packages\requests\api.py", line 44, in request 
return session.request(method=method, url=url, **kwargs) 
File "C:\Python33\lib\site-packages\requests\sessions.py", line 346, in request 
resp = self.send(prep, **send_kwargs) 
File "C:\Python33\lib\site-packages\requests\sessions.py", line 449, in send 
r = adapter.send(request, **kwargs) 
File "C:\Python33\lib\site-packages\requests\adapters.py", line 322, in send 
raise SSLError(e) 
requests.exceptions.SSLError: unknown error (_ssl.c:2158) 

ho provato anche OpenSSL per ottenere .pem e la chiave, ma con .pem e ottenere SSL: CERTIFICATE_VERIFY_FAILED

Per favore qualcuno può indirizzare su come importare i certs e dove metterli? Ho provato a cercare ma ho ancora affrontato lo stesso problema.

risposta

21

Ho avuto lo stesso problema. Il parametro verify sembra fare riferimento al certificato del server. Si desidera il parametro cert per specificare il certificato client.

Ho dovuto usare OpenSSL per convertire per ottenere un file PEM certificato e un file PEM chiave.

import requests 
cert_file_path = "cert.pem" 
key_file_path = "key.pem" 

url = "https://example.com/resource" 
params = {"param_1": "value_1", "param_2": "value_2"} 
cert = (cert_file_path, key_file_path) 
r = requests.get(url, params=params, cert=cert, verify=False) 

ho ancora avuto problemi con le richieste non giocare bene con alcuni server SSL, ma penso che la distinzione verify/cert potrebbe essere il vostro problema.

+3

Grazie mille. Scusa non ho risposto prima, ma quello sembrava risolvere il problema! Apprezzo la tua risposta. – onlyme

+0

come hai estratto cert e chiave da .pfx? – andrei