[파이썬] urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

Becoming a Data Engineer ·2025년 1월 6일
0

에러 모음집

목록 보기
5/6

에러 메세지

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate signature failure (_ssl.c:1002)

파이썬에서 HTTPS 요청을 보낼 때 SSL 인증서 검증에 실패했음 을 의미한다.

발생 원인 및 해결 방법

회사 네트워크 등 제한된 상황에서는 보안 정책에 따라 특정 루트 인증서가 설치되지 않았거나, 내부적으로 사용하는 프록시 서버가 SSL 트래픽을 모니터링하면서 인증서 검증에 영향을 줄 수 있다.

  1. 인증서가 만료되었거나 유효하지 않음: 서버의 SSL 인증서가 만료되었거나 신뢰할 수 없는 인증 기관에서 발급된 경우

    • 인증서 검증 비활성화: 임시로 SSL 인증서 검증을 비활성화 (단, 보안 취약)

      import ssl
      
      ssl._create_default_https_context = ssl._create_unverified_context
  2. 루트 인증서 누락: 파이썬 환경에 필요한 루트 인증서가 설치되지 않았거나 업데이트되지 않은 경우

    • certifi 라이브러리 사용: 최신 루트 인증서를 사용

      pip install certifi
      
      import ssl 
      import certifi
      
      # certifi 라이브러리에서 제공하는 최신 루트 인증서를 사용하여 기본 ssl 컨텍스트 생성
      ssl_context = ssl.create_default_context(cafile=certifi.where())
       
      • ssl.create_default_context() : 기본적으로 SSL 컨텍스트를 생성한다. SSL 컨텍스트는 SSL/TLS 설정을 포함하는 객체로, HTTPS 요청 시 사용할 인증서와 키, 프로토콜 등을 설정할 수 있다.

      • cafile=cerifi.where() : cafile 매개변수는 SSL 컨텍스트가 신뢰할 수 있는 인증서 파일의 경로를 지정한다. certifi.where()certifi 라이브러리가 제공하는 최신 루트 인증서 번들을 포함하는 파일의 경로를 반환한다. 이를 통해 최신 루트 인증서를 사용하여 SSL 인증서 검증을 수행할 수 있다.

    • 루트 인증서 업데이트: 운영 체제에 따라 루트 인증서를 업데이트

      예를 들어, 네이버 API를 사용하는 경우 네이버 서버의 SSL 인증서를 신뢰할 수 있도록 우리 컴퓨터에 적절한 루트 인증서가 설치되어 있어야 한다.

      네이버 서버에서 사용하는 SSL 인증서는 DigiCert Global Root G2 인증서에 의해 서명된 경우가 많다. 따라서, 이 루트 인증서를 설치해야 한다.

profile
I want to improve more 👩🏻‍💻

0개의 댓글

관련 채용 정보