SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)')

2020. 4. 9. 15:03etc/error

pip 명령어로 패키지를 설치하려고 하는데 다음과 같은 오류가 발생한 경우 해결방법입니다.

 

필자와 같이 내부망, 외부망이 나누어져 있는 환경 또는 인터넷망이 일반적이지 않고 특정 망을 타고 나가는 등 경우에는 아래와 같은 오류를 심심치 않게 만날 수 있습니다.

 

특정 주소에 있는 파일을 다이렉트로 설치하려고 할 때 보통 발생합니다.

 

SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)')

 

위 오류 원인은 방화벽에서 pip 패키지 사이트들을 허용하지 않을 경우 발생할 수 있습니다.

 

예를 들면 회사 내부의 인터넷 망일 경우 그 회사에서 사이트를 막아 두거나 방화벽 정책 등에 의해서 막혀있을 수 있고

 

사용하는 서버? 컴퓨터 자체에 정책일 수 도 있습니다.

 

간편하게 해결하는 방법은 pip install 시 옵션을 사용하는 방식입니다.

pip install certifi --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org

[--trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org] 옵션을 사용하여 패키지 도메인들을 신뢰하는 방법입니다.

 

패키지 도메인은 이 밖에 다른 주소가 존재할 수 있습니다.

 

 

대부분의 블로그는 위와 같은 방식을 설명합니다.

 

위 방법이 한두번 사용하기에는 편리합니다.

 

예를 들면 pytorch 를 설치할 때 download.pytorch.org 주소에 있는 whl 파일을 설치하는 경우는 초반에 한번이면 됩니다.

 

이럴 경우에는 trusted-host 옵션을 활용하면 좋습니다.

 

혹은 미리 적어놓고 패키지 설치때마다 그냥 복사해서 사용해도 무관합니다.

 

하지만 위 방법은 단점이 존재합니다.

 

 

매번 옵션을 써줘야 하는 번거러움이 있습니다.

 

패키지를 초기에 설치하고 다시 추가될 것이 많이 않으면 상관이 없지만

 

새로운 패키지를 자주 설치해야 한다면 꽤 부담스러울 수 있습니다.

 

또한 패키지 서버마다 도메인이 다르기 때문에 해당 도메인을 작성해 줘야 합니다.

 

 

사실 패키지를 자주 설치하는 사람이라면 위 옵션정도는 그때그때 쓸 수 있지만

 

자주 사용하지 않는 사람들은 trusted-host 옵션이 잘 떠오르지 않아서 늘 검색하곤 합니다.

 

 

그래서 한번 설정하고 계속 사용할 수 있는 방법을 작성해 보았습니다.

 

그래서 global 설정을 해두면 다음부터는 항상 신뢰할 수 있습니다.

 

pip.conf (윈도우는 pip.ini)파일을 만들어야 합니다.

 

내용은 다음과 같습니다.

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

해당 파일을 만들고 다음 위치에 복사해 두면 됩니다.

 

이렇게 등록해두면 한번 등록된 주소는 항상 신뢰하게 되고 다시 물어보는 일이 없습니다.

 

단 모든 사이트를 산발적으로 등록하게 된다면 추후에 보안문제가 발생할 수 있으니 조심해야 합니다.

 

신뢰할 수 없는 사이트를 등록해서는 안됩니다.

 

유닉스 계열 : $HOME/.config/pip/pip.conf
맥 : $HOME/Library/Application Support/pip/pip.conf 또는 $HOME/.config/pip/pip.conf 
윈도우 : %UserProfile%\pip\pip.ini