인터넷 연결이 자유롭지 않은 사설망에서 이런 문제가 종종 발생할 수 있는데 이런 경우 인증서 검증 단계를 무시해주는 것으로 우회(?)할 수 있다. 물론 신뢰받지 못한 호스트에 https 연결을 하는 것은 보안 측면에서 위험할 수 있다는 사실은 알고있어야 한다.
pip 을 이용해서 패키지를 설치할 때 다음과 같은 문제가 발생한다면
Collecting encodings
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/encodings/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/encodings/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/encodings/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/encodings/
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)': /simple/encodings/
Could not fetch URL https://pypi.org/simple/encodings/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/encodings/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)) - skipping
Could not find a version that satisfies the requirement encodings (from versions: )
No matching distribution found for encodings
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)) - skipping
pip 명령줄에서 --trusted-host
옵션을 지원하기 떄문에 다음과 같은 옵션을 추가해서 pypi.org, files.pypthonhosted.org 두 호스트는 믿을만 하다고 수동으로 인증을 스킵할 수 있다.
--trusted-host pypi.org --trusted-host files.pythonhosted.org
매번 명령줄에 쓰는게 번거롭다면 내부적으로 requests 라이브러리 이용하는 ${site-packages PATH}/pip/_vendor/requests/sessions.py
코드에서 다음과 같이 verify = False 로 설정해주면 된다.
#: SSL Verification default.
#self.verify = True
self.verify = False
물론 모든 호스트에 인증서 검증을 하지 않기 때문에 조심해서 써야한다.