2013-09-25 5 views
13

나는 + HTTPS 요청을 사용하는 Python 미니 응용 프로그램을 유지 관리하고 있습니다. Python 요청 "인증서 확인 실패"

응용

는 (합법적으로) 변경 한 HTTPS URL에 호스트의 IP 주소까지했다. 브라우저에서 URL을 가리키면 괜찮습니다.

는 어디 파이썬/요청은 SSH의에서 known_hosts의 아날로그를 유지 않으며, 어떻게 내가이 호스트를 삭제합니까?

$ python --version 
Python 2.7.3 

$ cat foo.py 
import requests 
url = "https://somehost/resource.json" 
requests.get(url, timeout=5, config={'danger_mode': True}) 

$ source venv/bin/activate 
$ python foo.py 
Traceback (most recent call last): 
    File "foo.py", line 3, in <module> 
    requests.get(url, timeout=5, config={'danger_mode': True}) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 65, in get 
return request('get', url, **kwargs) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped 
return function(method, url, **kwargs) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 51, in request 
return session.request(method=method, url=url, **kwargs) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 241, in request 
r.send(prefetch=prefetch) 
    File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/models.py", line 641, in send 
raise SSLError(e) 
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL  routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
+5

인증서가 유효하지 않은 이유가 확실하지 않지만 해결 방법으로'requests.get (url, timeout = 5, config = { 'danger_mode': True), verify = False)' [Requests advanced usage documentation] (http://www.python-requests.org/en/latest/user/advanced/)에 언급 된대로 SSL 인증서를 무시하십시오. –

+1

@ AndréDaniel에는'config'가 제거 되었습니까? 나는 링크 된 페이지에서 그것을 볼 수 없다. 그리고 나의 파이썬은 그것이 알려지지 않았다고 주장한다. 그리고'verify = False'만으로도 트릭을하지 않는 것 같습니다 ... – codeling

+0

@RandolphCarter 방금 페이지를 보았습니다. 여전히 "SSL Cert"를 검색합니다 (직접 링크를 제공하고 싶지만 나는 내 전화에있어 정말 그렇게 할 수 없다) ... –

답변

4

고대 버전의 요청을 사용 중입니다. 2.0으로 업그레이드하면 더 유용한 메시지가 표시되며 사이트에 인증서 불일치가있는 경우 중간 인증서를 확인할 수있는 시스템 인증서를 지정하여 문제를 해결할 수 있습니다. 앙드레가 제안한대로 인증서를 확인하지 않아도됩니다.

+1

서버 업그레이드시 서명되지 않거나 부정확하게 서명 된 인증서가 설치되어있는 것으로 나타났습니다. 브라우저의 HTTPS는 두 OS 간의 루트 인증서 차이로 인해 Windows 컴퓨터에서 작동했습니다. IP 변경은 (혼란스러운 것을 제외하고는) 그것과 거의 관련이 없었습니다. –

1

그것은 질문에 언급 된 서버를 업그레이드하는 동안 잘못 서명 된 인증서가 설치되었는지 밝혀졌다. 브라우저의 HTTPS는 Windows 브라우저 시스템과 Ubuntu Python 클라이언트 간의 루트 인증서 차이로 인해 작동했습니다. 파이썬이 실행 된 동일한 우분투 컴퓨터의 브라우저를 통해 HTTPS가 인증서 문제 세부 사항을 공개했습니다.

IP 변경 사항은 문제를 혼동시키는 것 외에는 문제가 거의 없습니다.

로 대답에 내 의견을 추진 :

  1. 이 질문은 내가 지식을 공유 할 충분한 트래픽을 점점 내 질문에 대답했다.
관련 문제