질문
I'm working on a simple script that involves CAS, jspring security check, redirection, etc. I would like to use Kenneth Reitz's python requests because it's a great piece of work! However, CAS requires getting validated via SSL so I have to get past that step first. I don't know what Python requests is wanting? Where is this SSL certificate supposed to reside?
Traceback (most recent call last):
File "./test.py", line 24, in <module>
response = requests.get(url1, headers=headers)
File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 209, in request
File "build/bdist.linux-x86_64/egg/requests/models.py", line 624, in send
File "build/bdist.linux-x86_64/egg/requests/models.py", line 300, in _build_response
File "build/bdist.linux-x86_64/egg/requests/models.py", line 611, in send
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
답변
문제는 신뢰할 수 없는 SSL 인증서에 의해 발생하는 것입니다.
이전 댓글에서 언급한 것처럼, 가장 빠른 해결책은 verify=False
로 설정하는 것입니다:
requests.get('https://example.com', verify=False)
이로 인해 인증서가 확인되지 않게 됩니다. 이는 중간자 공격과 같은 보안 위험에 노출될 수 있습니다.
물론 판단을 가지고 사용하십시오. 댓글에서 언급한 대로, 이것은 빠른/일회용 애플리케이션 또는 스크립트에는 허용될 수 있지만, 실제 제품 소프트웨어로는 사용해서는 안됩니다.
인증서 확인을 건너뛰는 것만으로는 허용할 수 없는 경우, 다음 옵션을 고려하십시오. 가장 좋은 옵션은 verify
매개변수를 .pem
파일의 경로인 문자열로 설정하는 것입니다(안전한 방법으로 얻어야 합니다).
따라서 2.0 버전부터 verify
매개변수는 다음 값과 해당 의미를 허용합니다:
True
: 인증서를 라이브러리 자체의 신뢰할 수 있는 인증 기관에 대해 유효성을 검사합니다 (참고: Requests가 사용하는 루트 인증서는 Certifi 라이브러리를 통해 볼 수 있으며, 이는 Requests에서 추출한 RC의 신뢰 데이터베이스입니다: Certifi - Trust Database for Humans).False
: 인증서 유효성 검사를 완전히 우회합니다.- Requests가 인증서를 검증하는 데 사용할 CA_BUNDLE 파일의 경로입니다.
동일한 링크에서 cert
매개변수도 살펴보세요.
댓글