2013-07-10 14 views
9

Wezwę REST API z zapytaniami w pythonie i do tej pory udało mi się, gdy ustawię verify=False.Żądania w pythnowaniu - błąd SSL po stronie klienta cert

Teraz muszę użyć certyfikatu po stronie klienta, który muszę zaimportować do uwierzytelnienia i otrzymuję ten błąd za każdym razem kiedy używam cert (.pfx). cert.pfx jest chroniony hasłem.

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

Jest to błąd Dostaję:

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) 

Próbowałem zostały również openssl dostać .pem i klucz, ale z .pem i coraz SSL: CERTIFICATE_VERIFY_FAILED

Może ktoś proszę kierować do mnie na jak zaimportować certyfikaty i gdzie je umieścić? Próbowałem szukać, ale wciąż mam do czynienia z tym samym problemem.

Odpowiedz

21

Miałem ten sam problem. Parametr verify wydaje się odnosić do certyfikatu serwera. Chcesz, aby parametr cert określał certyfikat klienta.

Musiałem użyć OpenSSL, aby przekonwertować, aby uzyskać plik PEM certyfikatu i kluczowy plik PEM.

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) 

wciąż miałem problemy z wnioskami nie gra dobrze z niektórymi serwerami SSL, ale myślę, że verify/cert rozróżnienie może być problem.

+3

Dziękuję bardzo. Niestety nie odpowiedziałem wcześniej, ale wydawało się, że to rozwiązało problem! Doceń swoją odpowiedź. – onlyme

+0

w jaki sposób wyodrębniłeś certyfikat i klucz z pliku .pfx? – andrei