소개
SSL 인증서 검증 실패 오류를 해결합니다.
Python requests
나 ssl
라이브러리에서 자주 발생합니다.
Windows 환경에서 원인과 대응책을 정리했습니다.
오류 내용
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:…)
인증 기관(CA) 번들을 찾지 못하거나 신뢰하지 못할 때 발생합니다.
주요 원인
- 시스템에 CA 인증서가 없거나 오래됨.
- 환경 변수 설정이 잘못됨.
- 회사 프록시가 SSL을 가로챔.
- Python이 OS의 인증서 저장소를 찾지 못함.
해결 방법 1: Certifi 사용
-
certifi
설치pip install certifi
-
코드에서 번들 지정
import requests, certifi resp = requests.get( "https://example.com", verify=certifi.where() ) print(resp.status_code)
해결 방법 2: REQUESTS_CA_BUNDLE 설정
-
번들 경로 확인
python -c "import certifi; print(certifi.where())"
-
PowerShell에서 환경 변수 등록
setx REQUESTS_CA_BUNDLE "C:\path\to\cacert.pem"
-
터미널이나 IDE 재시작
해결 방법 3: SSL_CERT_FILE 설정 (Windows)
- PEM 파일 다운로드 (예: curl.se/docs/caextract.html)
-
PowerShell에 설정 추가
setx SSL_CERT_FILE "C:\path\to\cacert.pem"
- 터미널이나 IDE 재시작
해결 방법 4: 검증 우회 (테스트 전용)
import requests
resp = requests.get("https://example.com", verify=False)
print(resp.status_code)
주의: MITM 공격에 취약해집니다.
해결 방법 5: 세션 단위 번들 지정
import requests
sess = requests.Session()
sess.verify = "C:\\path\\to\\cacert.pem"
resp = sess.get("https://example.com")
print(resp.ok)
결론
정상 CA 번들을 사용하세요.
certifi
나 시스템 인증서를 권장합니다.
실서비스에서는 검증 우회를 피하세요.
Leave a comment