Python 애플리케이션에서 인증서 확인 실패 오류 발생

Python 애플리케이션에서 인증서 확인 실패 오류 발생

오랫동안 나는 사용하고 있었다NVP로서간단한 메모장내 Debian 시스템의 클라이언트입니다. 최근 내 시스템 중 하나가 갑자기 네트워크 서비스와의 동기화를 중단했습니다. API 변경이나 그런 것을 생각했는데, 다른 시스템에서 동일한 앱(동일 버전)을 사용해 보았는데 모든 것이 잘 작동했습니다.

문제의 시스템에서 문제를 디버깅한 결과 SSL: CERTIFICATE_VERIFY_FAILED서버와 통신을 시도할 때 시스템에서 오류가 발생하는 것을 발견했습니다. 더 이해하려고 노력했지만 실패했습니다. 현재 해당 문제에 대해 제가 알고 있는 내용은 다음과 같습니다.

  • 시스템 인증서에는 문제가 없습니다. Firefox는 아무런 문제 없이 SSL 인증서를 확인할 수 있습니다.
  • Python이 인증서를 볼 수 있도록 python-certifi및 패키지를 설치했습니다 .python3-certifi
  • 응용프로그램은 다른 두 데비안 시스템에서 잘 실행됩니다. 이들 모두는 데비안 테스트를 실행하고 있으며 항상 최신 상태입니다.
  • 소프트웨어의 독립 실행형 설치에서도 동일한 오류가 발생하므로 응용 프로그램이 손상되지 않고 설치 디렉터리에 항목을 저장하지 않습니다.

Python이나 캐싱에 관한 내용이 누락되었지만 합리적인 내용을 찾을 수 없습니다.

업데이트 1:

다음은 세 가지 시스템 및 웹 애플리케이션에 대한 감사에서 요청한 정보와 결과입니다.

  • 응용 프로그램은 다음 위치에 있습니다.https://simple-note.appspot.com/. 예시 REST 엔드포인트는 다음과 같습니다.https://simple-note.appspot.com/api/login. 전체 도메인 이름은 Google의 CA 기관인 G2에서 서명되었으며 인증서는 2017년 12월 6일까지 유효합니다. RSA가 포함된 2048비트 PKCS #1 SHA-256입니다.
  • 세 가지 시스템을 확인해 보니 그 중 하나가 문제의 시스템과 동일했습니다( /etc/ssl/certs로 확인 md5deep). 한 시스템에는 추가 인증서가 있지만 작동하는 시스템 중 하나에 해당 인증서가 없기 때문에 문제가 되지 않습니다.
  • 모든 시스템에는 python-certifi패키지가 설치되어 있습니다.

결과:세 시스템 모두 동일한 인증서를 가지며, 그 중 하나에는 추가 인증서가 있습니다. 추가 인증서가 없는 시스템은 문제 없이 설치되므로 추가 인증서는 중요하지 않습니다 nvPY.

 업데이트 2:

urllib2Python 자체가 인증서를 찾을 수 없는 것 같습니다 . capath제공된 사용자 정의 컨텍스트를 사용 하면 certifi.where()모든 것이 정상으로 돌아옵니다. 이상하게도 다른 시스템에서는 이 사용자 정의 컨텍스트가 필요하지 않습니다. 다음으로 작동하는 시스템과 작동하지 않는 시스템의 차이점을 알아보겠습니다.

업데이트 3:

임의의 URL에 연결하여 연결성을 테스트할 수 있는 작은 도구를 작성했는데 urllib2이상하게도 잘 작동합니다. 더 이상한 점은 문제가 있는 코드를 내 도구에 이식해도 문제가 발생하지 않는다는 것입니다(예상대로 작동함). 문제는 nvPY코드베이스에 있습니다. 버그 보고서가 열리고 이 시점부터 작업이 시작됩니다.

관련 정보