Programing

"연결 오류 : [SSL : CERTIFICATE_VERIFY_FAILED] 인증서 확인 실패 (_ssl.c : 598)"와 함께 pip 설치가 실패합니다.

lottogame 2020. 3. 3. 22:53
반응형

"연결 오류 : [SSL : CERTIFICATE_VERIFY_FAILED] 인증서 확인 실패 (_ssl.c : 598)"와 함께 pip 설치가 실패합니다.


저는 Python을 처음 접했고 > pip install linkcheckerWindows 7을 사용 하려고 합니다.

  • 패키지에 관계없이 pip 설치가 실패합니다. 예를 들어 > pip install scrapySSL 오류도 발생합니다.
  • Python 3.4.1의 바닐라 설치에는 pip 1.5.6이 포함되었습니다. 가장 먼저 시도한 것은 linkchecker를 설치하는 것입니다. Python 2.7은 이미 설치되어 있으며 ArcGIS와 함께 제공됩니다. python그리고 pip나는 3.4.1 설치 될 때까지 명령 줄에서 사용할 수 없었습니다.
  • > pip search linkchecker공장. pip 검색은 사이트의 SSL 인증서를 확인하지 않기 때문일 수 있습니다.
  • 나는 회사 네트워크에 있지만 인터넷에 연결하기 위해 프록시를 거치지 않습니다.
  • 각 회사 컴퓨터 (내 컴퓨터 포함)에는 https://google.com으로의 TLS 트래픽 모니터링을 활성화하는 등 여러 가지 이유로 사용되는 신뢰할 수있는 루트 인증 기관이 있습니다 . 그것이 그와 관련이 있는지 확실하지 않습니다.

다음은 실행 후 pip.log 의 내용입니다 pip install linkchecker.

Downloading/unpacking linkchecker
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Getting page https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/: connection error: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/ (Caused by <class 'http.client.CannotSendRequest'>: Request-sent)
  Will skip URL https://pypi.python.org/simple/ when looking for download links for linkchecker
  Cannot fetch index base URL https://pypi.python.org/simple/
  URLs to search for versions for linkchecker:
  * https://pypi.python.org/simple/linkchecker/
  Getting page https://pypi.python.org/simple/linkchecker/
  Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
  Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
  Could not find any downloads that satisfy the requirement linkchecker
Cleaning up...
  Removing temporary dir C:\Users\jcook\AppData\Local\Temp\pip_build_jcook...
No distributions at all found for linkchecker
Exception information:
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main
    status = self.run(options, args)
  File "C:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "C:\Python34\lib\site-packages\pip\req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "C:\Python34\lib\site-packages\pip\index.py", line 277, in find_requirement
    raise DistributionNotFound('No distributions at all found for %s' % req)
pip.exceptions.DistributionNotFound: No distributions at all found for linkchecker

신뢰할 수있는 호스트로 설정 pypi.org하여 SSL 오류를 무시할 수 있습니다 files.pythonhosted.org.

$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name>

참고 : 2018 년 4 월에 Python 패키지 색인 이에서 (으)로 이전 pypi.python.org되었습니다 pypi.org. 이는 기존 도메인을 사용하는 "신뢰할 수있는 호스트"명령이 더 이상 작동하지 않음을 의미합니다.

영구 수정

pip 10.0이 출시 된 이후, pip자체 업그레이드만으로이 문제를 영구적으로 해결할 수 있습니다.

$ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org pip setuptools

또는 최신 버전을 얻으려면 다시 설치하면 됩니다.

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

(… 그리고 get-pip.py관련 Python 인터프리터 로 실행 ).

pip install <otherpackage>이 후에 작동해야합니다. 그렇지 않은 경우 아래 설명 된대로 추가 작업을 수행해야합니다.


신뢰할 수있는 호스트 및 프록시를 구성 파일추가 할 수 있습니다 .

pip.ini(Windows) 또는 pip.conf(unix)

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

대체 솔루션 (안전하지 않음)

대부분의 답변은 보안 문제가 될 수 있습니다.

대부분의 Python 패키지를 쉽게 설치하는 데 도움이되는 두 가지 해결 방법은 다음과 같습니다.

  • easy_install 사용 : 정말 게으르고 많은 시간을 낭비하지 않으려면을 사용하십시오 easy_install <package_name>. 일부 패키지는 발견되지 않거나 작은 오류가 발생합니다.
  • 휠 사용 : python 패키지휠을 다운로드하고 pip 명령 pip install wheel_package_name.whl을 사용하여 패키지를 설치하십시오.

이 매개 변수를 사용하여 인증서를 지정할 수 있습니다.

pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker

참조 : 문서»참조 안내서»pip

회사의 루트 인증서를 지정해도 작동하지 않으면 cURL이 작동 할 수 있습니다. http://curl.haxx.se/ca/cacert.pem

CRT 파일이 아닌 PEM 파일을 사용해야합니다. CRT 파일이있는 경우 파일을 PEM 으로 변환 해야 합니다. 주석에이 파일이 CRT 파일과 함께 작동하지만 확인되지 않은 보고서가 있습니다.

또한 확인 : SSL CERT는 검증 .


kenorb의 답변 은 매우 유용합니다 (그리고 훌륭합니다!).
그의 솔루션 중 가장 간단한 방법 일 수 있습니다.--trusted-host

예를 들어이 경우에는

pip install --trusted-host pypi.python.org linkchecker

pem 파일 (또는 다른 것)은 필요하지 않습니다.


대답은 상당히 비슷하고 약간 혼란 스럽습니다. 필자의 경우 회사 네트워크의 인증서가 문제였습니다. 다음을 사용하여 문제를 해결할 수있었습니다.

pip install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org oauthlib -vvv

여기에서 볼 수 있듯이 . 자세한 출력이 필요하지 않은 경우 -vvv 인수를 생략 할 수 있습니다.


나를 위해 pip파일을 사용 하여 폴더를 만들어 문제를 해결 pip.ini했습니다 C:\Users\<username>\AppData\Roaming\.

C:\Users\<username>\AppData\Roaming\pip\pip.ini

그 안에 나는 썼다 :

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

파이썬을 다시 시작한 다음 pip는 이러한 사이트를 영구적으로 신뢰하고 패키지를 다운로드하는 데 사용했습니다.


내가 찾은 가장 간단한 방법은 DigiCert ( https://www.digicert.com/digicert-root-certificates.htm#roots) 에서 "DigiCert High Assurance EV Root CA"를 다운로드하여 사용하는 것입니다.

주소 표시 줄에서 잠금 아이콘을 클릭하여 https://pypi.python.org/방문 하여 인증서 발급자를 확인하거나 openssl을 사용하여 괴짜 신분증을 높일 수 있습니다.

$ openssl s_client -connect pypi.python.org:443
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=3359300/street=16 Allen Rd/postalCode=03894-4801/C=US/ST=NH/L=Wolfeboro,/O=Python Software Foundation/CN=www.python.org
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA

인증서 체인의 마지막 CN 값은 다운로드해야하는 CA의 이름입니다.

일회성 노력으로 다음을 수행하십시오.

  1. DigiCert 에서 CRT 다운로드
  2. CRT를 PEM 형식으로 변환
  3. PIP_CERT 환경 변수를 PEM 파일의 경로로 내 보냅니다.

pip를 실행하기 전에 (마지막 줄은 bash 쉘을 사용한다고 가정합니다).

curl -sO http://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt 
openssl x509 -inform DES -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -text
export PIP_CERT=`pwd`/DigiCertHighAssuranceEVRootCA.pem

이것을 재사용 할 수있게하려면 DigiCertHighAssuranceEVRootCA.crt를 일반적인 곳에 놓고 ~ / .bashrc에 PIP_CERT를 적절히 내보내십시오.


이 문제를 한 번에 해결하기 위해 pip.conf파일 이 있는지 확인할 수 있습니다 .

문서pip.conf 에 따르면 여기가 있어야합니다 .

Unix에서 기본 구성 파일은 $HOME/.config/pip/pip.confXDG_CONFIG_HOME 환경 변수를 따릅니다.

macOS에서 구성 파일은 $HOME/Library/Application Support/pip/pip.conf디렉토리 $HOME/Library/Application Support/pip가 다른 경우$HOME/.config/pip/pip.conf

Windows에서 구성 파일은 %APPDATA%\pip\pip.ini입니다.

virtualenv 내부에서 :

유닉스와 맥 OS에서 파일은 $VIRTUAL_ENV/pip.conf

Windows에서 파일은 다음과 같습니다. %VIRTUAL_ENV%\pip.ini

당신 pip.conf은 다음과 같아야합니다 :

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

pip install linkchecker파일을 linkchecker만든 후 불평없이 설치 pip.conf됩니다.


영구 수정

pip install --upgrade pip --trusted-host pypi.org --trusted-host files.pythonhosted.org

예를 들어 :

pip install <package name> --trusted-host pypi.org --trusted-host files.pythonhosted.org

문제를 해결하기 위해 다음과 같은 가능성이 있습니다 CERTIFICATE_VERIFY_FAILED.

  • HTTPS 대신 HTTP를 사용하십시오.
  • 대체 CA 번들을 지정 하려면 --cert <trusted.pem>또는 CA_BUNDLE변수를 사용하십시오 .

    예를 들어 웹 브라우저에서 실패한 URL로 이동하여 루트 인증서를 시스템으로 가져올 수 있습니다.

  • python -c "import ssl; print(ssl.get_default_verify_paths())"현재 항목을 확인하기 위해 실행 합니다 (있는 경우 확인).

  • OpenSSL을이 환경 쌍 ( SSL_CERT_DIR, SSL_CERT_FILE) 다른 인증서 데이터베이스 지정하는 데 사용할 수있는 PEP-476 .
  • --trusted-host <hostname>호스트를 신뢰할 수있는 것으로 표시하는 데 사용하십시오 .
  • 파이썬 사용에 verify=False대한 requests.get(참조 : SSL CERT는 검증 ).
  • --proxy <proxy>인증서 확인을 피하기 위해 사용 합니다.

: 더 많은 읽기 소켓 개체에 대한 TLS / SSL 래퍼 - 확인 인증서를 .


시간과 날짜를 올바르게 설정하십시오!

나를 위해, 내 날짜와 시간이 Raspberry Pi에서 잘못 구성되어 나왔습니다. 그 결과 https://files.pythonhosted.org/ 서버를 사용하여 모든 SSL 및 HTTPS 연결에 실패했습니다 .

다음과 같이 업데이트하십시오.

sudo date -s "Wed Thu  23 11:12:00 GMT+1 2018"
sudo dpkg-reconfigure tzdata

또는 구글의 시간과 같이 직접 :

참조 : https://superuser.com/a/635024/935136

sudo date -s "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"
sudo dpkg-reconfigure tzdata

SSL 인증을 필터링 할 수 있도록 자체 인증 기관을 사용하는 회사의 웹 컨텐츠 필터로 인해 최근이 문제가 발생했습니다. 내 경우에는 PIP가 시스템의 CA 인증서를 사용하지 않는 것 같으며 언급 한 오류가 발생합니다. PIP를 버전 1.2.1로 다운 그레이드하면 나중에 고유 한 문제가 발생하므로 Python 3.4와 함께 제공된 원래 버전으로 돌아갔습니다.

내 해결 방법은 매우 간단합니다 : use easy_install. 이전 PIP 버전과 같은 인증서를 확인하지 않거나 매번 작동하므로 시스템 인증서를 사용하는 것을 알고 있으며 여전히 PIP를 사용하여 easy_install로 설치된 패키지를 제거 할 수 있습니다.

그래도 문제가 해결되지 않고 문제가없는 네트워크 나 컴퓨터에 액세스 할 수 있다면 언제든지 개인 PyPI 서버를 설정할 수 있습니다. 미러없이 로컬 자체 pypi 리포지토리 인덱스를 만드는 방법은 무엇입니까?

나는 easy_install마지막 도랑 노력으로 사용하려고 할 때까지 거의 그랬습니다 .


https 대신 http를 사용하여 SSL 오류를 무시할 수 있습니다. 물론 이것은 보안 측면에서 최적아니지만 서두르면 트릭을 수행해야합니다.

pip install --index-url=http://pypi.python.org/simple/ linkchecker

사용하는 답변

pip install --trusted-host pypi.python.org <package>

작업. 그러나 리디렉션이 있거나 캐시 pip에 도달 했는지 확인해야 합니다. 와 Windows 7 pip 9.0.1에서 실행해야했습니다.

pip install \
  --trusted-host pypi.python.org \
  --trusted-host pypi.org \
  --trusted-host files.pythonhosted.org \
  <package>

verbose 플래그를 사용하여 찾을 수 있습니다.


easy_install과 함께 pip 1.2.1을 설치하고 필자의 경우 패키지를 설치할 수있는 최신 버전의 pip (당시 6.0.7)로 업그레이드했습니다.

easy_install pip==1.2.1
pip install --upgrade pip

4 가지 옵션이 있습니다.

인증서를 매개 변수로 사용

$ pip install --cert /path/to/mycertificate.crt linkchecker

에서 인증서 사용 pip.conf

이 파일을 작성하십시오.

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

다음 줄을 추가하십시오.

[global]
cert = /path/to/mycertificate.crt

인증서 무시 및 HTTP 사용

$ pip install --trusted-host pypi.python.org linkchecker

인증서 무시 및 pip.conf에서 HTTP 사용

이 파일을 작성하십시오.

$HOME/.pip/pip.conf (Linux)

%HOME%\pip\pip.ini (Windows)

다음 줄을 추가하십시오.

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

출처


가장 먼저,

    pip install --trusted-host pypi.python.org <package name>

나를 위해 일하지 않았다. CERTIFICATE_VERIFY_FAILED 오류가 계속 발생했습니다. 그러나 오류 메시지에서 'pypi.org'사이트를 참조한 것으로 나타났습니다. 그래서 나는 이것을 pypi.python.org 대신 신뢰할 수있는 호스트 이름으로 사용했습니다. 그것은 거의 나를 거기에 데려 갔다. CERTIFICATE_VERIFY_FAILED로로드에 실패했지만 나중에는 실패했습니다. 실패한 웹 사이트에 대한 참조를 찾기 위해 신뢰할 수있는 호스트로 포함 시켰습니다. 결국 나를 위해 일한 것은 다음과 같습니다.

    pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package name>

pip install ftputil64 비트 Windows 7 Enterprise에서 ActivePython 2.7.8, ActivePython 3.4.1 및 "주식"Python 3.4.2와 동일한 문제가 발생했습니다 . OP와 동일한 오류로 모든 시도가 실패했습니다.

pip 1.2.1로 다운 그레이드하여 Python 3.4.2의 문제를 해결했습니다 easy_install pip==1.2.1( https://stackoverflow.com/a/16370731/234235 참조 ). ActivePython 2.7.8에서도 동일한 수정 사항이 적용되었습니다.

2013 년 3 월보고 된 버그는 여전히 열려 : https://github.com/pypa/pip/issues/829 .


이것이 관련되어 있는지 확실하지 않지만 다음 파일을 Anaconda3 / Library / bin에서 Anaconda3 / DLLs로 복사하여 수정 된 비슷한 문제가 있습니다.

libcrypto-1_1-x64.dll

libssl-1_1-x64.dll


--verbose 옵션을 사용하여 pypi.python.org가 아닌 files.pythonhosted.org에 도착하기를 원할 때까지이 페이지의 어떤 것도 효과가 없었습니다.

pip install --trusted-host files.pythonhosted.org <package_name>

따라서 실제로 --verbose 옵션을 통해 실패한 URL을 확인하십시오.


내 pip를 제거하고 이전 버전의 pip를 설치 하여이 문제를 해결했습니다 : https://pypi.python.org/pypi/pip/1.2.1


"https"를 무시하기 위해 이것을 시도 할 수 있습니다.

pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org  [your package..]

제 경우에는 회사의 내부 CA가 SSL 인증서에 서명했기 때문입니다. 같은 해결 방법을 사용하면 pip --cert도움이되지 않지만 다음 패키지는 도움이되었습니다.

pip install pip_system_certs

참조 : https://pypi.org/project/pip-system-certs/

이 패키지는 pip를 패치하고 런타임시 기본 시스템 저장소 (번들 된 인증서 ca 대신)의 인증서를 사용하도록 요청합니다.

이를 통해 pip는 시스템 설치에서 인증서를 신뢰하는 서버에 대한 tls / ssl 연결을 확인할 수 있습니다.


나를 위해 이것은 이전에 프록시 (피들러로)를 설정하거나 콘솔을 다시 열거 나 재부팅하여 문제를 해결하는 스크립트를 실행하기 때문입니다.


최근에 나는 Visual Studio 2015와 함께 Python 3.6에서 같은 문제에 직면했습니다. 2 일을 보낸 후에 솔루션과 솔루션이 제대로 작동했습니다.

pip를 사용하거나 Visual Studio에서 numpy를 설치하려고 할 때 오류가 발생했습니다. numpy를 수집하면 URL을 가져올 수 없습니다 https://pypi.python.org/simple/numpy/ : SSL 인증서를 확인하는 데 문제가 있습니다. [SSL : CERTIFICATE_VERIFY_FAILED] 인증서 확인 실패 (_ssl.c : 748)-건너 뛰기 요구 사항 numpy (버전에서)를 만족하는 버전을 찾을 수 없습니다. numpy에 대해 일치하는 배포가 없습니다.

해결 :

Windows OS의 경우

  1. open-> "% appdata %" "pip"폴더가 없으면 작성하십시오.
  2. pip 폴더에 "pip.ini"파일을 작성하십시오.
  3. 파일을 편집하고
    [global]
    trusted-host = pypi.python.org를 작성하십시오. 파일을 저장하고 닫으십시오. 이제 pip / visual studio를 사용하여 설치하면 정상적으로 작동합니다.

Vaulstein의 답변이 도움이되었습니다.

내 PC에서 pip.ini 파일을 찾지 못했습니다. 다음도 마찬가지였습니다.

  1. AppData 폴더로 이동했습니다. 명령 프롬프트를 열고 echo % AppData %를 입력하여 appdata 폴더를 얻을 수 있습니다.

명령 프롬프트를 사용하는 AppData 위치

또는 단순히 Windows 탐색기에서 % AppData %를 입력하십시오.

Windows 탐색기의 AppData 위치

  1. 해당 appdata 폴더 안에 pip라는 폴더를 만듭니다.

  2. 방금 만든 pip 폴더에서 pip.ini라는 간단한 텍스트 파일을 만듭니다.

  3. 선택한 간단한 편집기를 사용하여 해당 파일에 다음 구성 설정을 붙여 넣습니다.

pip.ini 파일 :

[list]
format=columns

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

이제 잘 가야합니다.


(하나 개의 솔루션 Windows 용이 )라는 파일을 작성하는 것입니다 pip.ini%AppData%\pip\폴더 (존재하지 않는 경우 폴더를 만들를) 다음과 같은 세부 정보를 삽입 :

[global]
cert = C:/certs/python_root.pem
proxy = http://my_user@my_company.com:my_password@proxy_ip:proxy_port

... 그리고 우리는 설치 명령을 실행할 수 있습니다 :

pip3 install PyQt5

또 다른 옵션은 프록시 및 인증서에 대한 인수를 사용하여 패키지를 설치하는 것입니다 ...

$ pip3 install --proxy http://my_user@my_company.com:my_password@proxy_ip:proxy_port \
   --cert C:/certs/python_root.pem PyQt5

인증서 *.cer파일을 필요한 *.pem형식으로 변환하려면 다음 지시 사항을 실행하십시오.

$ openssl x509 -inform der -in python_root.cer -out python_root.pem

이것이 누군가를 돕기를 바랍니다!


나는 비슷한 문제에 직면했다. 나를 위해 일한 해결책 1) python 2.7 제거 2) python27 폴더 삭제 3) 최신 python 재설치


나를 위해 cert, HTTP, trusted-host를 사용하여 제안 된 방법 중 어느 것도 효과가 없었습니다.

필자의 경우 다른 버전의 패키지로 전환했습니다 (이 경우 paho-mqtt 1.3.0 대신 paho-mqtt 1.3.1).

문제가 해당 패키지 버전에만 해당되는 것 같습니다.


필자의 경우 최소 알파인 도커 이미지에서 Python을 실행 중이었습니다. 루트 CA 인증서가 누락되었습니다. 고치다:

apk update && apk add ca-certificates


시스템에 일부 인증서가없는 경우이 문제가 발생할 수 있습니다 (예 : opensuse install ca-certificates-mozilla).

참고 URL : https://stackoverflow.com/questions/25981703/pip-install-fails-with-connection-error-ssl-certificate-verify-failed-certi



반응형