2017-03-27 12 views
0

와 내가 그에게 매우 비슷한 문제가 있습니다하지 내가 urllib3 라이브러리와 파이썬 3.4을 사용하고 hereSSL은 SSL 클라이언트로 작동하지만 urllib3

을 논의했다. 나는 아래의 코드를 테스트 할 때

, 내가 얻을 :

Traceback (most recent call last): 
File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 600, in urlopen 
    chunked=chunked) 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 345, in _make_request 
    self._validate_conn(conn) 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 844, in _validate_conn 
    conn.connect() 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/packages/urllib3/connection.py", line 326, in connect 
    ssl_context=context) 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket 
    return context.wrap_socket(sock, server_hostname=server_hostname) 
    File "/usr/lib/python3.4/ssl.py", line 364, in wrap_socket 
    _context=self) 
    File "/usr/lib/python3.4/ssl.py", line 578, in __init__ 
    self.do_handshake() 
    File "/usr/lib/python3.4/ssl.py", line 805, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/adapters.py", line 423, in send 
    timeout=timeout 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 630, in urlopen 
    raise SSLError(e) 
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/home/julimatt/workspace2/zibawa/stack_configs/tests.py", line 44, in test_bind_grafana 
    result=getFromGrafanaApi(apiurl, data,'GET') 
    File "/home/julimatt/workspace2/zibawa/stack_configs/models.py", line 317, in getFromGrafanaApi 
    verify=ca_certs, 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/sessions.py", line 609, in send 
    r = adapter.send(request, **kwargs) 
    File "/home/julimatt/zibawa3/zib3/lib/python3.4/site-packages/requests/adapters.py", line 497, in send 
    raise SSLError(e, request=request) 
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598) 

내 코드는 다음과 같습니다

from requests import Request, Session 
ca_certs='/path/to/letsencypt/fullchain.pem' 
url= 'https://myserver.com:3000/api/org' 

username= settings.DASHBOARD['user'] 
password= settings.DASHBOARD['password'] 

headers = {'Accept': 'application/json', 
       'Content-Type' : 'application/json',} 

s = Session() 
req = Request('GET', url, data=data, headers=headers, auth=(username,password)) 

prepped = s.prepare_request(req) 

resp = s.send(prepped, 
verify=ca_certs, 

) 

print(resp.status_code) 
return resp 

내가 요청에 '= 거짓 확인'내 코드를 테스트 할 경우, 작동 괜찮 았지만 분명히 안전한 해결책은 아닙니다.

openssl s_client -connect myserver.com:3000 -CAfile /path/to/letsencypt/fullchain.pem 

가 그럼 난 성공적인 악수를 얻을 :

나는 사용하여 동일한 시스템의 터미널에서 내 SSL 연결을 테스트하기 위해 노력했다.

그래서이 오류가 발생하는 이유를 이해할 수 없습니다.

제공 할 수있는 도움에 미리 감사드립니다.

답변

0

어떤 루트 인증서를 사용할지 이해하지 못했고 대신 중간 인증서를 사용하고있었습니다.

해결책 :

는 letsencrypt 지역 사회의 도움에 따라 나는 https://www.identrust.com/certificates/trustid/root-download-x3.html에서 DST 루트 CA의 X3를 복사. 또한 "----- BEGIN CERTIFICATE -----"및 "----- END CERTIFICATE -----"줄을 내 파일에 추가해야했습니다. 그런 다음이 파일을 저장하면 파이썬에서 apis를 호출하고 "verify_certs"가 작동 할 때이 파일을 가리 키도록 "ca_certs"를 설정할 수있었습니다.