2013-07-10 3 views
9

파이썬에서 요청이있는 REST API를 호출 중이며 지금까지 verify=False을 설정하면 성공했습니다.Python Requests - 클라이언트 쪽 인증서의 SSL 오류

이제 인증을 위해 가져 오기해야하는 클라이언트 측 인증서를 사용해야하며 암호가 cert (.pfx). cert.pfx 일 때마다이 오류가 발생합니다.

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) 

나는 또한하려면 openssl이 .pem 키를 얻을 수 있지만, .pemSSL: CERTIFICATE_VERIFY_FAILED

누군가가 나에게 직접시겠습니까 얻는 것을 시도했다 :

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

내가지고있어 오류입니다 인증서를 가져 오는 방법과 위치는 어디에 있습니까? 나는 검색을 시도했지만 여전히 같은 문제에 직면 해있다.

답변

21

동일한 문제가있었습니다. verify 매개 변수가 서버 인증서를 나타내는 것 같습니다. cert 매개 변수에서 클라이언트 인증서를 지정해야합니다.

OpenSSL을 사용하여 인증서 PEM 파일과 키 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) 

나는 아직도 요청이 일부 SSL 서버와 잘 재생되지 않는 문제가 있었다, 그러나 나는 verify/cert 구별이 문제가 될 것 같아요.

+3

정말 고마워요. 죄송합니다. 이전에 응답하지 않았지만 문제가 해결 된 것 같습니다. 귀하의 응답을 감사하십시오. – onlyme

+0

.pfx에서 cert와 key를 어떻게 추출 했습니까? – andrei