pypi 저장소 이용 시와 번외로 https 가 명시되어 있는 외부 API 호출 시 경우로 나누었다. 아래의 글은 MacOS 기준으로 작성했다.

 

배경

사내 SSL 암복호화 때문에 인증서를 따로 사용하는데 이 경우 아래와 같은 오류 코드들을 만나게 되었다.

certificate verify failed: unable to get local issuer certificate
certificate verify failed: self-signed certificate in certificate chain

해결

pypi 저장소 이용 시

pyCharm

따로 건드려야 하는 설정은 없다.

pyenv, virtualenv

가상환경에 있는 pip 의 설정 파일(pip.conf)을 추가하거나 내용을 수정해서 해결 가능하다.

만약, 해당 파일이 없을 경우 사용자 home 디렉토리에서 .pip 폴더를 만든 후 pip.conf 파일을 만들어 신뢰 가능한 호스트를 넣는다.

[global]
trusted-host =
    pypi.org
    files.pythonhosted.org

즉, 아래처럼 만들어 주면 된다.

이렇게 하면 pyenv 를 사용하고 있는 상태에서 IDE 상관없이 해당 설정을 읽어 이용하게 되므로 문제없이 이용이 가능하다.

poetry

아래 명령어를 입력해서 신뢰 가능한 호스트를 추가한다.

$ poetry source add fpho https://files.pythonhosted.org
$ poetry config certificates.fpho.cert false
$ poetry source add pypi
$ poetry config certificates.PyPI.cert false
$ poetry config certificates.pypi.cert false

 

HTTPS 사용하는 외부 API 이용할 경우

SSL 암복호화 인증서를 직접 읽도록 환경 변수를 설정한다.

만약, zsh 을 이용하고 있다면 아래와 같이 넣는다.

$ vi ~/.zshrc
export REQUESTS_CA_BUNDLE=인증서주소
export SSL_CERT_FILE=인증서주소

 

혹시 모르니 현재 이용 중인 인증서들을 읽을 수 있도록 현재 Python 설치 상태와 homebrew 설치 라이브러리를 참고해서 아래 명령어를 실행하자

# 직접 Python 패키지를 설치한 경우
$ sudo ln -s /etc/ssl/* /Library/Frameworks/Python.framework/Versions/Current/etc/openssl/
# Apple Silicon 기준
$ sudo ln -s /etc/ssl/* /opt/homebrew/etc/openssl@3/certs
$ source ~/.zshrc