urllib 및 "SSL : CERTIFICATE_VERIFY_FAILED"오류


279

다음과 같은 오류가 발생합니다.

Exception in thread Thread-3:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in        __bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in  run
self.__target(*self.__args, **self.__kwargs)
File "/Users/Matthew/Desktop/Skypebot 2.0/bot.py", line 271, in process
info = urllib2.urlopen(req).read()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

이 오류를 일으키는 코드입니다.

if input.startswith("!web"):
    input = input.replace("!web ", "")      
    url = "https://domainsearch.p.mashape.com/index.php?name=" + input
    req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXX' })
    info = urllib2.urlopen(req).read()
    Message.Chat.SendMessage ("" + info)

내가 사용하는 API는 HTTPS를 사용해야합니다. 확인을 우회하도록하려면 어떻게해야합니까?


2
URL에는 아무런 문제가 없으며 일반적인 신뢰할 수있는 인증서로 확인할 수 있습니다. 따라서 인증서 유효성 검사를 우회하지 말고 수정하십시오. 어떤 버전의 파이썬을 사용하고 있습니까?
Steffen Ullrich

이것은 stackoverflow.com/a/27826829/3081018 와 관련이있을 수 있습니다 . 서버는 여러 트러스트 경로와 동일한 종류의 인증서 체인을 사용합니다. 확인에 사용해야하는 cafile을 참조하십시오.
Steffen Ullrich

7
이 오류는 요세미티로 업그레이드 한 후 Python 3.5에서도 발생합니다
pyCthon

2
상황을 설명합니다. access.redhat.com/articles/2039753
찰리 번즈

4
"확인을 우회하도록하려면 어떻게해야합니까?" 잘못된 질문입니다. 도메인에서 제공 한 인증서의 유효성을 검사하는 방법을 문의해야합니다.
jww

답변:


296

당신이 경우 단지 바이 패스 검증하려는 새 만들 수 의 SSLContext를 . 기본적으로 새로 작성된 컨텍스트는 CERT_NONE을 사용 합니다 .

섹션 17.3.7.2.1에 명시된대로주의하십시오.

SSLContext 생성자를 직접 호출 할 때 CERT_NONE이 기본값입니다. 다른 피어를 인증하지 않으므로 특히 대화하는 서버의 신뢰성을 보장하려는 대부분의 클라이언트 모드에서는 안전하지 않을 수 있습니다. 따라서 클라이언트 모드에서는 CERT_REQUIRED를 사용하는 것이 좋습니다.

그러나 다른 이유로 지금 작동하게하려면 다음을 수행해야합니다 import ssl.

input = input.replace("!web ", "")      
url = "https://domainsearch.p.mashape.com/index.php?name=" + input
req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' })
gcontext = ssl.SSLContext()  # Only for gangstars
info = urllib2.urlopen(req, context=gcontext).read()
Message.Chat.SendMessage ("" + info)

이것은 문제를 해결해야하지만 실제로 문제를 해결하지는 못하지만 [SSL: CERTIFICATE_VERIFY_FAILED]인증서를 확인하지 않았기 때문에 표시 되지 않습니다!

위의 내용을 추가하기 위해 이러한 문제가 발생하는 이유에 대해 더 알고 싶다면 PEP 476을 살펴보십시오 .

이 PEP는 기본적으로 Python의 HTTP 클라이언트에 대한 호스트 이름 확인뿐만 아니라 X509 인증서 서명의 검증을 활성화하여 호출별로 옵트 아웃하도록 제안합니다. 이 변경 사항은 Python 2.7, Python 3.4 및 Python 3.5에 적용됩니다.

위의 조언과 다르지 않은 조언이 있습니다.

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

또한 파이썬에서 자주 볼 수없는 원숭이 패치 를 통해 매우 낙담 한 옵션을 제공합니다.

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

확인되지 않은 컨텍스트를 작성하는 기능으로 컨텍스트 작성의 기본 기능을 대체합니다.

PEP에 명시된대로이 점에 유의하십시오.

이 지침은 주로 HTTPS 연결에서 인증서 확인을 지원하지 않는 레거시 환경에서이 PEP를 구현하는 최신 버전의 Python을 채택하려는 시스템 관리자를 대상으로합니다. 예를 들어, 관리자는 Python의 표준 운영 환경에서 위의 monkeypatch를 sitecustomize.py에 추가하여 옵트 아웃 할 수 있습니다. 응용 프로그램과 라이브러리는이 변경 프로세스를 광범위하게 만들어서는 안됩니다 (시스템 관리자 제어 구성 설정에 대한 응답을 제외하고).

소프트웨어에서 인증서 확인이 나쁜 이유에 대한 논문을 읽으려면 여기에서 찾을 수 있습니다 !


1
따라서이 오류로 인해 사용하지 못하게되면 setup.py upload어떻게 해결할 수 있습니까?
pyCthon

5
ssl._create_default_https_context = ssl._create_unverified_context 마지막에 Noelkd가 언급했듯이 이것은 나를 위해 일했습니다. 우리는 HP 프린터를위한 인트라넷 사이트이기 때문에 순전히 스크랩에 사용됩니다 ...이 방법을 사용하는 데는 문제가 없습니다.
ihightower

바이 패스 유효성 검사는 가장 바람직하지 않은 방법입니다. 실제로 인증서의 유효성을 검사하는 인증서가 먼저 나열되지 않은 이유는 무엇입니까?
jww

1
오래된 버전의 openSSL이있는 경우에도 발생할 수 있습니다. 그래서 나를 위해 일한 것은 가장 최신 버전으로 certifi 업데이트하고 상자에서 openssl을 업데이트하는 것이 었습니다 .
myusuf3 2016 년

1
context 내가 필요한 것
prayagupd

382

이것은 귀하의 특정 문제에 대한 해결책은 아니지만이 스레드가 "SSL : CERTIFICATE_VERIFY_FAILED"에 대한 Google의 최고 결과이므로 여기에 두겠습니다.

OSX에 Python 3.6을 설치하고 https : // 사이트에 연결하려고 할 때 "SSL : CERTIFICATE_VERIFY_FAILED"오류가 발생하는 경우 OSX의 Python 3.6에는 인증서가 전혀없고 SSL을 확인할 수 없기 때문일 수 있습니다. 사이. 이는 OSX에서 3.6에 대한 변경 certifi이며 인증서 패키지 를 설치하는 설치 후 단계가 필요합니다 . 이것은 ReadMe에 문서화되어 있습니다./Applications/Python\ 3.6/ReadMe.rtf

ReadMe는이 설치 후 스크립트를 실행할 것입니다 certifi./Applications/Python\ 3.6/Install\ Certificates.command

릴리스 정보에는 https://www.python.org/downloads/release/python-360/에 대한 추가 정보가 있습니다.


105
/ Applications / Python \ 3.6 / Install \ Certificates.command를 직접 실행하여 OSX에서 내 문제를 해결하십시오. 감사.
muyong

2
OS X El Capitan 10.11.6, Python 3.6.0을 사용하고 있으며이 솔루션은 완벽하게 작동했습니다.
y2knoproblem

2
macOS Sierra 10.12.5, Python 3.6.1을 사용하고 있으며이 솔루션은 완벽하게 작동했습니다.
James

4
이것은 /Applications/Python\ 3.7/Install\ Certificates.command 이것을 직접 실행하도록 수정했습니다 terminal! 감사합니다 @CraigGlennie & @muyong out-of-the-box-thinking여기에 배치 해 주셔서 감사합니다 !
JayRizzo

6
macOS Mojave의 Python 3.7 : 여기서 작동하지 않습니다. 제거 / 다시 설치 / 설치 인증서 실행, 재부팅 등이 작동하지 않습니다.
Thomas

71

Craig Glennie의 답변을 확장하려면 :

MacOs Sierra의 Python 3.6.1

bash 터미널에 이것을 입력하면 문제가 해결되었습니다.

pip install certifi
/Applications/Python\ 3.6/Install\ Certificates.command

3
시도 sudo /Applications/Python\ 3.6/Install\ Certificates.command권한이 거부되는 경우.
KingKongCoder

이것은 실제로 Python 3.6의 문제를 해결하지 않습니다. -1
hyperum

1
커맨드 라인을 사용하여 당신을 괴롭히는 경우 (아마도 여기에 있지는 않지만) 설치시 Python이 생성 한 Applications 폴더 (또는 다른 OS에서 동등한 폴더)를 찾은 다음 두 번 클릭하여 스크립트를 열 수 있습니다. 폴더의 특정 이름은 설치 한 Python 버전에 따라 다릅니다.
Erdős-Bacon

파이썬 3.7.3의 매력처럼 작동했습니다. 감사합니다.
klbytec

감사. 나는 말 그대로 100의 솔루션을 검색했으며 귀하의 솔루션이 효과가있었습니다.
NND

43

Windows에서 Python은 시스템 인증서를 보지 않고에있는 자체 인증서를 사용합니다 ?\lib\site-packages\certifi\cacert.pem.

문제에 대한 해결책 :

  1. 도메인 확인 인증서를 * .crt 또는 * pem 파일로 다운로드
  2. 편집기에서 파일을 열고 내용을 클립 보드에 복사
  3. 당신의 cacert.pem위치를 찾으십시오 :from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. cacert.pem파일을 편집하고 파일 끝에 도메인 유효성 검사 인증서를 붙여 넣습니다.
  5. 파일을 저장하고 요청을 즐기십시오!

6
lib\site-packages\certifi\cacert.pemPython 2.7.10에는 없습니다. 그리고 질문은 urllib2아닙니다requests
Kevin Smyth

2
지금까지 가장 좋은 해결책은 트위터 API가 내 파이썬의 cacert.pem 파일에없는 DigiCert 인증서를 사용하는 것입니다. 나는 거기에 VOILA를 추가했습니다!
digz6666

2
데비안에서 일했습니다. 레코드의 경우 시스템의 파일 경로는 다음과 같습니다 /usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem. 감사!
ofavre

불행히도 파이썬 요청은 운영 체제의 CA 신뢰 저장소를 사용하지 않습니다. github.com/requests/requests/issues/2966 . REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/issues/111#issuecomment-406839514 를 설정해야합니다 .
jamshid

Google 및 Twitter API 및 일반적으로 요청 모듈과 함께 Windows 10, Python 3.6에서 작동합니다.
brittenb

36

Mac OS X에 대한 내 솔루션 :

1) 공식 Python 언어 웹 사이트 https://www.python.org/downloads/ 에서 다운로드 한 기본 앱 Python 설치 프로그램을 사용하여 Python 3.6.5로 업그레이드

이 설치 프로그램이 homebrew보다 새로운 Python의 링크 및 심볼릭 링크를 훨씬 더 잘 관리하고 있음을 발견했습니다.

2) 새로 고친 Python 3.6 디렉토리에있는 "./Install Certificates.command"를 사용하여 새 인증서를 설치하십시오.

> cd "/Applications/Python 3.6/"
> sudo "./Install Certificates.command"

Mac OS X에서 매력처럼 작동했습니다.
Manu mathew

31

이것을 환경 변수에 추가해 볼 수 있습니다.

PYTHONHTTPSVERIFY=0 

이렇게하면 모든 HTTP 확인 이 비활성화 되므로 약간의 쇠약 한 접근 방식이지만 확인이 필요하지 않은 경우 효과적인 솔루션 일 수 있습니다.


17
모든 파이썬에 대해 모든 HTTP 확인을 비활성화하면 확인에서 하나의 오류를 처리하기에는 약간 과도하다고 생각합니다. 기본적으로 확인을 원하는 경우가 많이 있습니다.
trevorKirkby

Python 2.7.13의 Windows Server 2016에서 나를 위해 일했습니다. 필자는 일반적으로 Windows 서버에 Python을 설치하지 않았지만 Nexus 1000v를 VDS로 마이그레이션하여 vCenter 업그레이드를 위해 필요했습니다. 업그레이드 된 환경). 파이썬 요청 패키지에서 cacert.pem을 편집하여 인증서를 수락하는 것은 운이 없었습니다.
Christopher Thorjussen

3
또한 스크립트를 실행하기 전에 명령 줄 창에서 변수를 직접 설정 했으므로 @ someone-or-other와 같은 모든 검사가 비활성화되지 않으므로 권장하지 않습니다.
크리스토퍼 Thorjussen

그것은 내 유스 케이스에 완벽합니다 : 테스트. 나는 프로덕션에서 이것을하지 않을 것이지만 SSL과 관련이없는 테스트를 실행하는 경우 훌륭한 옵션입니다.
sorin

감사합니다,이 솔루션은 나를 위해 그것을했다 : import os os.environ [ "PYTHONHTTPSVERIFY"] = "0"
mbello

28

Python 3.4, 3.5 및 3.6urllib.request.urlopen 에서 사용하고 있었지만 비슷한 문제가 발생했습니다 . (이것은 Python 2의 문서 페이지 헤드에있는 메모에 따라 Python 3에 해당하는 부분입니다 .)urllib2urllib2

내 솔루션은 pip install certifi설치 certifi하는 것이 었습니다 .

... TLS 호스트의 신원을 확인하면서 SSL 인증서의 신뢰성을 검증하기 위해 신중하게 선별 된 루트 인증서 모음입니다.

그런 다음 이전에 방금했던 코드에서 :

import urllib.request as urlrq

resp = urlrq.urlopen('https://example.com/bar/baz.html')

나는 그것을 다음과 같이 수정했다.

import urllib.request as urlrq
import certifi

resp = urlrq.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())

urllib2.urlopen설명서를 올바르게 읽으면 cafile인수도 있습니다. 따라서 urllib2.urlopen([...], certifi.where())Python 2.7에서도 작동 할 수 있습니다.


UPDATE (2020년 1월 1일) : 파이썬 3.6의 바와 같이, 에 인수가 사용되지 않습니다 로, 가정 인수 대신 지정해야합니다. 3.5에서 3.8까지 다음과 같이 잘 작동한다는 것을 알았습니다.cafileurlopencontext

import urllib.request as urlrq
import certifi
import ssl

resp = urlrq.urlopen('https://example.com/bar/baz.html', context=ssl.create_default_context(cafile=certifi.where()))

1
load_verify_locationsSSLContext인스턴스를 변경하고 를 반환합니다 None. context=ssl.create_default_context(cafile=certifi.where())대신 사용해야 합니다. 자세한 내용은 ssl문서 를 참조하십시오.
ostrokach

1
@ ostrokach 허, 나는 그런 것을 시도했지만 잘못된 ssl기능을 사용해야했습니다 . 편집을보십시오; 확인?
hBy2Py

13
import requests
requests.packages.urllib3.disable_warnings()

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

여기에서 가져온 https://gist.github.com/michaelrice/a6794a017e349fc65d01


Jenkins 환경, 개인 환경 에서이 솔루션을 테스트하면 작동합니다!
rapport89

2
모든 인증서 확인을 우회하고 모든 위험을 감수하고 Anybody를 사랑하기 때문에 프로덕션 코드에서는 이것을 사용하지 않으므로 이는 매우 안전하지 않습니다.
dragon788

감사. 마침내 작동했습니다. Mac OS의 / Applications에 Python 3.6을 설치할 필요는 없습니다. 이것은 정답입니다.
Biranchi

그런 원숭이 패치를 절대로해서는 안됩니다. 이는 매우 위험하며 코드의 모든 다운 스트림 사용에 영향을 미칩니다.
Acumenus

10

내가 주석에 작성한 것처럼이 문제는 아마도이 SO 답변 과 관련 있습니다.

간단히 말해 : 인증서를 확인하는 여러 가지 방법이 있습니다. OpenSSL에서 사용하는 확인은 시스템에있는 신뢰할 수있는 루트 인증서와 호환되지 않습니다. OpenSSL은 Python에서 사용됩니다.

Verisign Class 3 Public Primary Certification Authority에 대해 누락 된 인증서를 확보 한 다음 Python 문서cafile 에 따라 옵션 을 사용할 수 있습니다 .

urllib2.urlopen(req, cafile="verisign.pem")

파이썬과 SSL 유효성 검사 링크
없음

8

Linux 컴퓨터 중 하나에서 비슷한 문제가 발생했습니다. 새로운 인증서를 생성하고 인증서 디렉토리를 가리키는 환경 변수를 내 보내면 나를 위해 수정되었습니다.

$ sudo update-ca-certificates --fresh
$ export SSL_CERT_DIR=/etc/ssl/certs

7

Craig Glennie와 마찬가지로 웹 전체 에서이 문제를 언급하는 많은 게시물로 인해 거위 추적에 나섰기 때문에 다른 대답을 추가해야합니다.

MacPorts를 사용하고 있으며 원래 Python 문제라고 생각한 것은 실제로 MacPorts 문제였습니다. openssl 설치와 함께 루트 인증서를 설치하지 않습니다. 해결책은 이 블로그 게시물port install curl-ca-bundle 에서 언급 한 것입니다 .


5

나는 이것을 여기 에서 발견 했다

이 솔루션을 찾았습니다. 소스 파일의 시작 부분에 다음 코드를 삽입하십시오.

import ssl

try:
   _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

이 코드는 ssl 인증이 확인되지 않도록 확인을 취소합니다.


이 비디오를 통해 ssl이 무엇인지 이해하는 데 도움이되었습니다. 동영상 URL : youtu.be/dsuVPxuU_hc
Ganesh Chowdhary Sadanala

4

들어 파이썬 3.4 이상CentOS의 7분의 6, 페도라 , 바로이 CA 이런 식으로 신뢰 설치 :

  1. CA.crt를 복사하여 /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract

2
어리석은 질문 일지 모르지만 CA.crt는 무엇이며 어디서 찾을 수 있습니까?
Iqbal

4

아나콘다 솔루션

내 설정은 프록시가있는 MacOS의 Anaconda Python 3.7입니다. 경로가 다릅니다.

  • 올바른 인증서 경로 를 얻는 방법은 다음과 같습니다.
import ssl
ssl.get_default_verify_paths()

내 시스템에서 생성 된

Out[35]: DefaultVerifyPaths(cafile='/miniconda3/ssl/cert.pem', capath=None,
 openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/miniconda3/ssl/cert.pem',
 openssl_capath_env='SSL_CERT_DIR', openssl_capath='/miniconda3/ssl/certs')

인증서의 위치를 ​​알면 프록시가 사용하는 인증서를 해당 파일의 끝에 연결 합니다.

나는 다음을 실행하여 프록시와 함께 작동하도록 이미 conda를 설정했습니다.

conda config --set ssl_verify <pathToYourFile>.crt

인증서의 위치를 ​​모르는 경우 다음 위치에서 찾을 수 있습니다 ~/.condarc.

ssl_verify: <pathToYourFile>.crt

이제 파일을 끝까지 연결 하면 /miniconda3/ssl/cert.pem 요청이 작동하고 특히 sklearn.datasets유사한 도구가 작동합니다.

추가주의 사항

Anaconda 설정이 약간 다르기 때문에 다른 솔루션이 작동하지 않았습니다.

  • 경로 Applications/Python\ 3.X는 존재하지 않습니다.

  • 아래 명령으로 제공된 경로 는 잘못된 경로입니다.

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH

3

내 경우에는 내가 맞은 URL이 유효하고 인증서가 유효하다는 것을 제외하고는 같은 문제가 있었기 때문에 머리를 반 수치에 매달렸다. 유효하지 않은 것은 웹에 대한 연결이었습니다. 브라우저에 프록시 정보를 추가하지 못했습니다 (이 경우 IE). 이로 인해 확인 프로세스가 올바르게 수행되지 않았습니다.
프록시 세부 사항에 추가되면 내 파이썬은 매우 행복했습니다.


1
무언가를 잊어 버리고 그것을 알아 차리고 공유 한 것에 대해 부끄러워하지 마십시오. 누군가가 유용하다고 생각할 수도 있습니다. 그래도 IE를 사용하여 ... 부끄러운 : p
Davos

3

Python 2.7.12 (기본값, Jul 29 2016, 15:26:22)에서 언급 된 문제를 해결했습니다. 이 정보는 다른 사람에게 도움이 될 수 있습니다.


3
Mac에서는 2.7.12에서 urllib2 라이브러리를 사용하여 리 퀘트 라이브러리를 사용하는 것이 좋습니다.
marcadian

사용 @marcadian 설치 및 certifi분명히 보유 증명서의 스크랩입니다 requests, 3.6 파이썬 3.4에 나를 위해 문제를 해결 .
hBy2Py

3

이 모든 지시 사항이 내 문제를 해결하지 못한 것에 놀랐습니다. 그럼에도 불구하고 진단은 정확합니다 (BTW, Mac 및 Python3.6.1을 사용하고 있습니다). 올바른 부분을 요약하면 다음과 같습니다.

  • Mac에서 Apple은 OpenSSL을 삭제합니다
  • 파이썬은 이제 자체 CA 루트 인증서 세트를 사용합니다.
  • 이진 Python 설치는 Python에 필요한 CA 루트 인증서를 설치하는 스크립트를 제공했습니다 ( "/ Applications / Python 3.6 / Install Certificates.command").
  • 자세한 내용은 "/ Applications / Python 3.6 / ReadMe.rtf"를 읽으십시오.

나에게 스크립트가 작동하지 않고 모든 인증 및 openssl 설치도 수정하지 못했습니다. 아마도 파이썬 2와 3이 여러 개 설치되어 있고 많은 virtualenv가 있기 때문일 수 있습니다. 결국, 나는 그것을 손으로 고쳐야합니다.

pip install certifi   # for your virtualenv
mkdir -p /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl
cp -a <your virtualenv>/site-package/certifi/cacert.pem \
  /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem

그래도 실패하면. 그런 다음 OpenSSL도 다시 설치하십시오.

port install openssl

2

당신처럼, 나는 오래된 iMac (OS X 10.6.8)에서 python 2.7을 사용하고 있으며 urllib2.urlopen을 사용하여 문제를 만났습니다.

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

내 프로그램은 SSL 인증서 문제없이 정상적으로 실행되었으며 갑자기 프로그램을 다운로드 한 후이 SSL 오류로 충돌했습니다.

문제는 사용 된 파이썬 버전이었습니다.

  1. https://www.python.org/downloads 및 python-2.7.9-macosx10.6.pkg에 문제가 없습니다.

  2. Homebrew 도구가 설치 한 문제 : "brew install python", / usr / local / bin에있는 버전.

라는 장, Certificate verification and OpenSSL [CHANGED for Python 2.7.9]/Applications/Python 2.7/ReadMe.rtf많은 세부 사항과 문제점을 설명합니다.

따라서 올바른 버전의 파이썬을 확인하고 다운로드하여 경로에 넣으십시오.


2

centOS 7이있는 Amazon EC2의 Python 2.7

SSL_CERT_DIR에있는 내 변수 를 가리 키도록 env 변수를 설정해야 ca-bundle했습니다./etc/ssl/certs/ca-bundle.crt


당신은 대답이 나를 올바른 길로 인도했습니다. 우분투에, 나는 설정했습니다 SSL_CERT_DIR/etc/ssl/certs, 또한 확실 만든 ca-certificates패키지를 설치하고 최신되었다.
Norman Breau


1

시험

pip install --trusted-host pypi.python.org 패키지 이름

그것은 나를 위해 일했다.


1

보세요

/ 응용 프로그램 / Python 3.6 / Install Certificates.command

또한 Aplications로 이동하여 Certificates를 클릭하십시오.


1

때문에 내 경우에는이 오류를 얻고 있었다 requestsurllib3버전이 호환되지 않는 설치하는 동안 다음과 같은 오류를 제공합니다 :

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.
pip install 'urllib3<1.25' --force-reinstall

트릭을했다.


1

또 다른 아나콘다 솔루션. macOS의 Python 2.7 환경에서 CERTIFICATE_VERIFY_FAILED를 받았습니다. 그것은 콘다 경로가 잘못되었음을 나타냅니다.

기본 (3.7) 환경 :

>>> import ssl
>>> ssl.get_default_verify_paths()
DefaultVerifyPaths(cafile='/usr/local/anaconda3/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/ssl/certs')

2.7 환경 (경로가 존재하지 않았습니다!) :

DefaultVerifyPaths(cafile='', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/envs/py27/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/envs/py27/ssl/certs')

수정 :

cd /usr/local/anaconda3/envs/py27/
mkdir ssl
cd ssl
ln -s ../../../ssl/cert.pem

1

ca-certificatesLinux 의 패키지 에서 중간 인증서가 누락되어 SSL : CERTIFICATE_VERIFY_FAILED 오류가 발생할 수도 있습니다 . 예를 들어 필자의 경우 Firefox 브라우저에 중간 인증서 " DigiCert SHA2 Secure Server CA "가 ca-certificates없어도 패키지 에 없습니다 . wget이 오류를 발생시키는 URL 에서 명령을 직접 실행하여 누락 된 인증서를 찾을 수 있습니다 . 그런 다음 인증 기관의 공식 웹 사이트 (예 : https://www.digicert.com/digicert-root-certificates.htm) 에서이 인증서의 CRT 파일에 해당하는 링크를 검색 할 수 있습니다 . 이제 귀하의 경우에 누락 된 인증서를 포함시키기 위해 대신 CRT 파일 다운로드 링크를 사용하여 아래 명령을 실행할 수 있습니다.

wget https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt

mv DigiCertSHA2SecureServerCA.crt DigiCertSHA2SecureServerCA.der

openssl x509 -inform DER -outform PEM -in DigiCertSHA2SecureServerCA.der -out DigicertSHA2SecureServerCA.pem.crt

sudo mkdir /usr/share/ca-certificates/extra

sudo cp DigicertSHA2SecureServerCA.pem.crt /usr/share/ca-certificates/extra/

sudo dpkg-reconfigure ca-certificates

그런 다음 wgetpython urllib패키지 를 사용하거나 URL을 다시 테스트 할 수 있습니다 . 자세한 내용은 https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242를 참조하십시오.


0

vCenter 6을 사용하는 경우 대신 vCenter의 vmware 인증 기관 인증서를 OS의 신뢰할 수있는 CA 목록에 추가해야합니다. 인증서를 다운로드하려면 다음을 수행하십시오.

  1. 웹 브라우저를여십시오.
  2. https : //로 이동
  3. 오른쪽 하단에서 신뢰할 수있는 루트 CA 다운로드 링크를 클릭하십시오.

페도라에서

  1. 압축을 풀고 확장자를 .0에서 .cer로 변경하십시오.
  2. / etc / pki / ca-trust / source / anchors /에 복사하십시오.
  3. update-ca-trust 명령을 실행하십시오.

연결:

  1. https://virtualizationreview.com/articles/2015/04/02/install-root-self-signed-certificate-vcenter-6.aspx?m=1
  2. http://forums.fedoraforum.org/showthread.php?t=293856

그는 자신이 vCenter 6이 아니라 OS X에 있다고 밝혔습니다.
jww

0

MAC OS X에 nltk 설치 단계 (python3 (3.6.2)가 이미 설치되어 있음)

sudo easy_install pip

6의 이전 버전 제거를 무시하려면 설치 무시 옵션을 사용하십시오. 그렇지 않으면 제거하는 동안 오류가 발생하고 영화를 전달하지 않습니다.

sudo pip3 install -U nltk --ignore-installed six

pip 및 python 설치를 확인하고 '3'버전을 사용하십시오.

which python python2 python3
which pip pip2 pip3

NLTK가 설치되어 있는지 확인

python3
import nltk
nltk.__path__
['/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/nltk']

예제 북을 설치하기 전에 SSL 인증서를 설치하십시오. 그렇지 않으면 예제를 설치하는 동안 인증서 오류가 발생합니다

/Applications/Python\ 3.6/Install\ Certificates.command
python3 -m nltk.downloader book

책 예제를 위해 nltk 및 nltk_ata의 설치가 완료되었습니다.


0

PEM으로 변환하지 않고 나를 위해 설치 PyOpenSSL하여 사용 pip:

pip install PyOpenSSL

0

프록시가 활성화되어 있는지 Fiddler (HTTP 디버깅 프록시) 검사를 닫아서이 문제를 해결 한 후 다시 시도하십시오.


0

Python 2.7의 C : \ Python27 \ lib \ site-packages \ certifi \ cacert.pem 파일 끝에 신뢰할 수있는 루트 CA 세부 정보 추가

그 후 (관리자 권한을 사용하여) pip install --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org packageName을 실행했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.