본문 바로가기
Python/Python FAQ

Python 파이썬 Requests에서 SSLError이 발생하는 중, Python Requests throwing SSLError

by 베타코드 2023. 10. 13.
반응형

질문


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 파일의 경로입니다.

출처: Requests - SSL 인증서 확인

동일한 링크에서 cert 매개변수도 살펴보세요.

반응형

댓글