urllib ve “SSL: CERTIFICATE_VERIFY_FAILED” Hatası


279

Aşağıdaki hatayı alıyorum:

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)>

Bu hataya neden olan kod budur:

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)

Kullandığım API, HTTPS kullanmamı gerektiriyor. Doğrulamayı nasıl atlayabilirim?


2
URL ile ilgili yanlış bir şey yoktur ve ortak güvenilir sertifikalarla başarıyla doğrulanabilir. Bu nedenle sertifika doğrulamasını atlamaya çalışmamalı, düzeltmeye çalışmalısınız. Hangi python sürümünü kullanıyorsunuz?
Steffen Ullrich

Bu, stackoverflow.com/a/27826829/3081018 ile ilişkili olabilir . Sunucu, birden çok güven yolu ile aynı tür sertifika zincirini kullanır. Doğrulama için hangi kafeyi kullanmanız gerekebileceğini görün.
Steffen Ullrich

7
Bu hata yosemite
pyCthon


4
"Doğrulamayı nasıl atlayabilirim?" yanlış soru. Muhtemelen alan tarafından sağlanan sertifikayı nasıl doğrulayacağınızı sormalısınız.
jww

Yanıtlar:


296

Eğer varsa sadece bypass doğrulama isteyen, yeni oluşturabilirsiniz SSLContext . Varsayılan olarak yeni oluşturulan bağlamlar CERT_NONE kullanır .

Bölüm 17.3.7.2.1'de belirtildiği şekilde buna dikkat edin

SSLContext yapıcısını doğrudan çağırdığınızda, CERT_NONE varsayılan değerdir. Diğer eşin kimliğini doğrulamadığından, özellikle de konuştuğunuz sunucunun özgünlüğünü sağlamak istediğiniz istemci modunda güvenli olmayabilir. Bu nedenle, istemci modundayken, CERT_REQUIRED kullanılması önemle tavsiye edilir.

Ancak, şimdi başka bir nedenden dolayı çalışmasını istiyorsanız, aşağıdakileri import sslde yapabilirsiniz:

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)

Bu sorununuzu çözecektir, ancak sorunları gerçekten çözmüyorsunuz, ancak görmeyeceksiniz [SSL: CERTIFICATE_VERIFY_FAILED]çünkü şimdi sertifikayı doğrulamıyorsunuz!

Yukarıdakilere eklemek için, neden bu sorunları gördüğünüz hakkında daha fazla bilgi edinmek istiyorsanız, PEP 476'ya göz atmak isteyeceksiniz .

Bu PEP, X509 sertifika imzalarının ve Python'un HTTP istemcileri için çağrı başına ayrı ayrı devre dışı bırakma varsayılan olarak ana bilgisayar adı doğrulamasının etkinleştirilmesini önerir. Bu değişiklik Python 2.7, Python 3.4 ve Python 3.5'e uygulanacaktır.

Yukarıdaki tavsiyemden farklı olmayan bir tavsiye devre dışı bırakma seçeneği vardır:

import ssl

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

Ayrıca python'da sık görmediğiniz maymun derisi aracılığıyla son derece cesareti kırılmış bir seçenek sunuyor :

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

Bu, doğrulanmamış bir bağlam oluşturma işleviyle bağlam oluşturma için varsayılan işlevi geçersiz kılar.

Lütfen KEP'de belirtildiği gibi şunu not edin:

Bu kılavuz öncelikle HTTPS bağlantılarında sertifika doğrulamasını henüz desteklemeyen eski ortamlarda bu PEP'i uygulayan yeni Python sürümlerini benimsemek isteyen sistem yöneticilerini hedeflemektedir. Örneğin, bir yönetici Python için Standart İşletim Ortamında sitecustomize.py öğesini yukarıdaki maymun parçasını ekleyerek devre dışı bırakabilir. Uygulamalar ve kütüphaneler bu değişiklik işlemini geniş kapsamlı YAPMAMALIDIR (belki sistem yöneticisi tarafından kontrol edilen yapılandırma ayarına yanıt dışında).

Yazılımda sertifikaları doğrulamamanın neden kötü olduğuna dair bir makale okumak isterseniz, burada bulabilirsiniz !


1
Peki bu hata beni kullanmaktan setup.py uploadalıkoyuyorsa bunu nasıl düzeltebilirim?
pyCthon

5
ssl._create_default_https_context = ssl._create_unverified_context Noelkd'nin sonuna yaklaştığı gibi benim için çalıştı. Bizimki HP yazıcılar için bir intranet sitesi olduğundan ... sadece kazıma için kullanılır ... bu yöntemi kullanmakla ilgili bir sorunumuz yok.
ihightower

İlk yöntem en az istenen tek baypas doğrulamasıdır. Neden ilk önce sertifikayı doğrulayan sertifika listelenmiyor?
jww

1
bu, openSSL'nin eski bir sürümüne sahipseniz de olabilir. Yani benim için çalışan en son sürümüne certifi güncelleme ve kutularda openssl güncelleme oldu.
myusuf3

1
context ihtiyacım olan şey
prayagupd

382

Bu, özel sorununuza bir çözüm değildir, ancak bu konuyu buraya yerleştiriyorum çünkü bu konu "SSL: CERTIFICATE_VERIFY_FAILED" için en iyi Google sonucu ve beni vahşi bir kaz peşinde koşuyor.

Python 3.6'yı OSX üzerine yüklediyseniz ve bir https: // sitesine bağlanmaya çalışırken "SSL: CERTIFICATE_VERIFY_FAILED" hatasını alıyorsanız, bunun nedeni büyük olasılıkla OSX'teki Python 3.6'nın hiçbir sertifikası olmaması ve herhangi bir SSL'yi doğrulayamamasıdır bağlantıları. Bu, OSX'te 3.6 için yapılan bir değişikliktir ve certifisertifika paketini yükleyen bir yükleme sonrası adımı gerektirir . Bu, bulabileceğiniz ReadMe dosyasında belgelenmiştir/Applications/Python\ 3.6/ReadMe.rtf

BeniOku, yalnızca yükleyen bu yükleme sonrası komut dosyasını çalıştırmanızı sağlar certifi:/Applications/Python\ 3.6/Install\ Certificates.command

Sürüm notlarında biraz daha bilgi var: https://www.python.org/downloads/release/python-360/


105
/ Applications / Python \ 3.6 / Install \ Certificates.command komutunu doğrudan çalıştır, OSX'te sorunumu çöz. Teşekkürler.
muyong

2
OS X El Capitan 10.11.6, Python 3.6.0 kullanıyorum ve bu çözüm mükemmel çalıştı.
y2knoproblem

2
MacOS Sierra 10.12.5, Python 3.6.1 kullanıyorum ve bu çözüm mükemmel çalıştı.
James

4
Bu benim için /Applications/Python\ 3.7/Install\ Certificates.command bu doğrudan çalışan benim için sabit terminal! @CraigGlennie & @muyong Buraya out-of-the-box-thinkingyerleştirdiğiniz için teşekkür ederiz !
JayRizzo

6
MacOS Mojave'de Python 3.7: burada çalışmıyor. Yükleme sertifikasını kaldırdım / yeniden yükledim / çalıştırdım, yeniden
Thomas

71

Craig Glennie'nin cevabını genişletmek için:

Sierra Python 3.6.1'de

Bunu bash terminaline girmek sorunu çözdü:

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

3
sudo /Applications/Python\ 3.6/Install\ Certificates.commandizinler reddedilirse deneyin .
KingKongCoder

Bu aslında Python 3.6'daki sorunu gidermez. -1
hyperum

1
Komut satırını kullanmak sizi korkutuyorsa (muhtemelen burada değil, ama hey), Python'un kurulumda oluşturduğu Uygulamalar klasörünü (veya diğer işletim sistemlerinde eşdeğerini) bulabilir ve ardından komut dosyasını çift tıklatarak açabilirsiniz. Klasörün adı, yüklediğiniz Python sürümüne bağlıdır.
Erdős-Bacon

Python 3.7.3 için bir cazibe gibi çalıştı. Teşekkür ederim.
klbytec

Teşekkürler. Kelimenin tam anlamıyla 100'lü çözümleri aradım ve sizinki çalıştı.
nnd

43

Windows'da Python sistem sertifikasına bakmaz, ?\lib\site-packages\certifi\cacert.pem .

Sorununuzun çözümü:

  1. alan adı doğrulama sertifikasını * .crt veya * pem dosyası olarak indirin
  2. dosyayı düzenleyicide aç ve içeriğini panoya kopyala
  3. cacert.pemkonumunuzu bulun :from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. cacert.pemdosyayı düzenleyin ve dosyanın sonuna alan adı doğrulama sertifikanızı yapıştırın.
  5. Dosyayı kaydedin ve isteklerin tadını çıkarın!

6
lib\site-packages\certifi\cacert.pemPython 2.7.10'da mevcut değildir. Ve soru hakkında urllib2değilrequests
Kevin Smyth

2
Şimdiye kadarki en iyi çözüm, twitter API, python'umun cacert.pem dosyasında olmayan DigiCert sertifikasını kullanıyor. Oraya ve VOILA ekledim!
digz6666

2
Debian üzerinde çalıştı. Kayıtları için sistemimde dosya yolu vardı: /usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem. Teşekkürler!
ofavre

Ne yazık ki python istekleri herhangi bir işletim sisteminin CA güven deposunu kullanmaz. github.com/requests/requests/issues/2966 . REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/issues/111#issuecomment-406839514 ayarlamanız gerekir .
jamshid

Windows 10, Python 3.6, Google ve Twitter API'ları ve genel olarak istek modülü ile çalışır.
brittenb

36

Mac OS X için çözümüm:

1) Resmi Python dil web sitesinden indirilen yerel uygulama Python yükleyicisini kullanarak Python 3.6.5'e yükseltin https://www.python.org/downloads/

Bu yükleyicinin yeni Python için bağlantıları ve simgeleri güncellemeyle homebrew'dan çok daha iyi olduğunu gördüm.

2) Yenilenen Python 3.6 dizinindeki "./Install Certificates.command" komutunu kullanarak yeni bir sertifika yükleyin

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

Mac OS X'te cazibe gibi çalıştı.
Manu mathew

31

Bunu ortam değişkenlerinize eklemeyi deneyebilirsiniz:

PYTHONHTTPSVERIFY=0 

Bunun tüm HTTP doğrulamasını devre dışı bırakacağını unutmayın, bu yüzden biraz balyoz yaklaşımıdır, ancak doğrulama gerekli değilse etkili bir çözüm olabilir.


17
Tüm python için tüm HTTP doğrulamasının devre dışı bırakılmasının doğrulamada bir hata ile başa çıkmak için biraz aşırı olduğundan şüpheleniyorum. Birinin varsayılan olarak doğrulama isteyebileceği birçok durum vardır.
trevorKirkby

Python 2.7.13 üzerinde Windows Server 2016 üzerinde çalıştı. Normalde Windows sunucularında python yüklü değil, ancak VDS'ye Nexus 1000v geçişi ile bir vCenter yükseltmesi için gerekliydi ve bu sadece şu anda kendinden imzalı bir vCenter sertifikasıyla ilgili sorunu çözüyor (VMCA ve geçerli sertifikaları kullanacak) yükseltilmiş ortam). Python istek paketinde cacert.pem'i düzenleyerek sertifikanın kabul edilmesini
sağlama şansım olmadı

3
Ayrıca, betiği çalıştırmadan önce değişkeni doğrudan komut satırı penceresinde ayarladım, bu yüzden @ birisi veya diğerlerinden korktuğum tüm kontrolleri devre dışı bırakmayacağım, ki ben de tavsiye etmem.
Christopher Thorjussen

Bu benim kullanım durumum için mükemmel: test. Bunu asla üretimde yapmam, ama SSL ile ilgisi olmayan testler yapmak için harika bir seçenek.
sorin

Teşekkürler, bu çözüm benim için yaptı: import os os.environ ["PYTHONHTTPSVERIFY"] = "0"
mbello

28

Benzer bir sorun yaşıyordum urllib.request.urlopen, Python 3.4, 3.5 ve 3.6'da kullanıyordum . (Bu, urllib2Python 2'nin urllib2belge sayfasının başındaki nota göre Python 3 eşdeğerinin bir parçasıdır .)

Benim çözüm pip install certifikurmak certifiolan oldu:

... TLS ana bilgisayarlarının kimliğini doğrularken SSL sertifikalarının güvenilirliğini doğrulamak için özenle seçilmiş bir Kök Sertifika koleksiyonu.

Sonra, daha önce vardı benim kodda:

import urllib.request as urlrq

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

Bunu şu şekilde revize ettim:

import urllib.request as urlrq
import certifi

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

Ben okursanız urllib2.urlopenbelgelerine doğru, o da bir sahiptir cafileargüman. Yani, urllib2.urlopen([...], certifi.where())Python 2.7 için işe yanı olabilir.


GÜNCELLEME (2020/01/01): Python 3.6 itibariyle argüman kullanımdan kaldırıldı ile sözde argüman yerine belirtilmesi. 3.5 ile 3.8 arasında eşit derecede iyi çalışmak için aşağıdakileri buldum: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_locationsmutasyon SSLContextörneği ve döner None. Bunun context=ssl.create_default_context(cafile=certifi.where())yerine kullanmalısınız . Daha fazla bilgi için ssldokümanlara bakın .
ostrokach

1
@ostrokach Huh, böyle bir şey denedim, ama yanlış sslişlevi kullanmalıydım. Bkz. Düzenleme; tamam?
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

Buradan alınan https://gist.github.com/michaelrice/a6794a017e349fc65d01


Jenkins çözüm, kişisel çevre bu çözüm test, bu işe yarıyor!
rapport89

2
Bu, TÜM sertifika doğrulamasını atladığı, kendi sorumluluğunuzda olduğu ve ANYBODY aşkı için üretim kodunda kullanmadığı için son derece güvenli değildir.
dragon788

Teşekkürler. Sonunda işe yaradı. Python 3.6'nın Mac OS'ta / Applications altında yüklü olması gerekmez. Bu kabul edilen cevap olmalı.
Biranchi

Asla böyle maymun derisi yapmamalısın. Son derece tehlikelidir ve kodun tüm aşağı akış kullanımını etkileyecektir.
Acumenus

10

Bir yorumda yazdığım gibi, bu sorun muhtemelen bu SO cevabı ile ilgilidir .

Kısacası: sertifikayı doğrulamanın birden fazla yolu vardır. OpenSSL tarafından kullanılan doğrulama, sisteminizde bulunan güvenilir kök sertifikalarla uyumsuz. OpenSSL, Python tarafından kullanılır.

Verisign Sınıf 3 Genel Birincil Sertifika Yetkilisi için eksik sertifikayı almaya çalışabilir ve ardından Python belgelerinecafile göre seçeneği kullanabilirsiniz :

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

Python ve ssl doğrulama bağlantısında
Yok

8

Linux makinelerimden birinde de benzer bir sorun yaşadım. Yeni sertifikalar oluşturmak ve sertifikalar dizinine işaret eden bir ortam değişkenini dışa aktarmak benim için düzeltti:

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

7

Başka bir cevap eklemem gerekiyor çünkü tıpkı Craig Glennie gibi, Web'deki bu soruna atıfta bulunan birçok gönderi nedeniyle vahşi kaz kovalamacasına gittim.

MacPorts kullanıyorum ve aslında bir Python problemi olduğunu düşündüğüm aslında bir MacPorts problemiydi: openssl kurulumu ile bir kök sertifika yüklemez. Çözüm, bu blog yazısındaport install curl-ca-bundle belirtildiği gibi .


5

Ben üzerinden bu bulduk burada

Bu çözümü buldum, kaynak dosyanızın başına şu kodu ekleyin:

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

Bu kod, SSL sertifikasının doğrulanmaması için doğrulamayı geri alır.


Bu videoyu görmek bana ssl ne olduğunu anlamak için çok yardımcı oldu. video URL'si: youtu.be/dsuVPxuU_hc
Ganesh Chowdhary Sadanala

4

İçin Python 3.4+ üzerinde Centos 7/6, Fedora , sadece Kanada'da bu şekilde güvenilen yükleyin:

  1. CA.crt dosyasını /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract

2
Aptalca bir soru olabilir, ancak CA.crt nedir ve nerede bulabilirim?
İkbal

4

Anaconda için çözüm

Kurulumum MacOS'ta bir proxy ile Anaconda Python 3.7. Yollar farklı.

  • Doğru sertifika yolunu şu şekilde elde edersiniz :
import ssl
ssl.get_default_verify_paths()

hangi benim sistem üzerinde üretilen

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')

Sertifikanın nereye gittiğini öğrendikten sonra , proxy tarafından kullanılan sertifikayı dosyanın sonuna kadar birleştirirsiniz .

Conda'yı vekil sunucumla çalışacak şekilde ayarlamıştım:

conda config --set ssl_verify <pathToYourFile>.crt

Sertifikanızın nerede olduğunu hatırlamıyorsanız, içinde bulabilirsiniz ~/.condarc:

ssl_verify: <pathToYourFile>.crt

Şimdi bu dosyayı sonuna kadar birleştirin/miniconda3/ssl/cert.pem ve istekler çalışmalı ve özellikle sklearn.datasetsbenzer araçlar çalışmalıdır.

Diğer Uyarılar

Anaconda kurulumu biraz farklı olduğu için diğer çözümler işe yaramadı:

  • Yol Applications/Python\ 3.Xyok.

  • Aşağıdaki komutlar tarafından sağlanan yol YANLIŞ yoldur

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH

3

Aynı sorun yaşadığım için başımı yarı utanç içinde asıyorum, benim durumumda vurduğum URL geçerli, sertifika geçerli. Geçerli olmayan, web ile olan bağlantımdı. Tarayıcıya proxy ayrıntıları ekleyememiştim (bu durumda IE). Bu, doğrulama işleminin doğru bir şekilde gerçekleşmesini durdurdu.
Proxy ayrıntılarına eklendi ve pitonum çok mutlu oldu.


1
Bir şey unutmak ve daha sonra anlamak ve paylaşmak için başınızı utanç içinde asmayın, birisi bunu yararlı bulabilir. IE kullanarak olsa ... utanç: p
Davos

3

Python 2.7.12 (varsayılan, 29 Tem 2016, 15:26:22) söz konusu sorunu düzeltti. Bu bilgi başka birine yardımcı olabilir.


3
Ben mac üzerinde 2.7.12 üzerinde, urllib2 kitaplığı kullanarak, requets kitaplığı kullanarak olsa iyi görünüyor
marcadian

kullanarak @marcadian Yükleme ve certifigörünüşe tarafından tutulan sertifikaların bir sıyrık olduğunu requests, 3.6 Python 3.4 benim için sorun çözülmüştür .
hBy2Py

3

Tüm bu talimatların sorunumu çözmediğine şaşırdım. Bununla birlikte, teşhis doğrudur (BTW, Mac ve Python 3.6.1 kullanıyorum). Yani, doğru kısmı özetlemek gerekirse:

  • Mac'te Apple, OpenSSL'yi bırakıyor
  • Python artık kendi CA Kök Sertifikası kümesini kullanıyor
  • İkili Python kurulumu, Python'un ihtiyaç duyduğu CA Kök sertifikasını yüklemek için bir komut dosyası sağladı ("/ Applications / Python 3.6 / Install Certificates.command")
  • Ayrıntılar için "/ Uygulamalar / Python 3.6 / ReadMe.rtf" dosyasını okuyun

Benim için komut dosyası çalışmıyor ve tüm bu sertifika ve openssl yüklemeleri de düzeltilemedi. Belki birden fazla python 2 ve 3 kurulumumun yanı sıra birçok virtualenv var. Sonunda, elle düzeltmem gerekiyor.

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

Eğer bu hala başarısız olursa. Ardından OpenSSL'yi de yeniden yükleyin.

port install openssl

2

Sizin gibi, eski iMac (OS X 10.6.8) üzerinde python 2.7 kullanıyorum, urllib2.urlopen kullanarak da sorunla tanıştım:

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

Programlarım SSL sertifikası sorunları olmadan düzgün çalışıyordu ve aniden (programları indirdikten sonra), bu SSL hatasıyla çöktü.

Sorun kullanılan python sürümü idi:

  1. Https://www.python.org/downloads ve python-2.7.9-macosx10.6.pkg ile ilgili sorun yok

  2. Homebrew aracı tarafından yüklenen sorunla ilgili : "brew install python", / usr / local / bin içinde bulunan sürüm.

Adlı bir bölüm, Certificate verification and OpenSSL [CHANGED for Python 2.7.9]içinde /Applications/Python 2.7/ReadMe.rtfbirçok detayları ile sorunu açıklar.

Bu yüzden, kontrol edin, indirin ve PATH'nize doğru python sürümünü koyun.


2

CentOS 7 ile Amazon EC2'de Python 2.7

Ben env değişkeni ayarlamak zorunda SSL_CERT_DIRbenim için noktaya ca-bundlebulunan hangi/etc/ssl/certs/ca-bundle.crt


Cevabın beni benim için doğru yola yönlendirdi. Ubuntu, ben ayarlamak zorunda SSL_CERT_DIRiçin /etc/ssl/certsve ayrıca emin oldum ca-certificatespaketinin kurulması ve güncel edildi.
Norman Breau


1

Deneyin

pip install --trusted-host pypi.python.org paket adı

Benim için çalıştı.


1

Şuna baksana

/ Uygulamalar / Python 3.6 / Install Certificates.command

Ayrıca Başvurular ve tıklayın


1

Çünkü Benim durumumda bu hatayı başlamıştı requestsve urllib3versiyonları uyumsuz olan yükleme sırasında aşağıdaki hatayı vererek:

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

hile yaptı.


1

Başka bir Anaconda çözümü. MacOS'ta Python 2.7 ortamımda CERTIFICATE_VERIFY_FAILED alıyordum. Konda yollarının kötü olduğu ortaya çıktı:

temel (3.7) ortam:

>>> 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 çevre (yollar yoktu!):

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')

Çözüm:

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

1

SSL: CERTIFICATE_VERIFY_FAILED hatası ca-certificates, Linux'ta pakette Ara Sertifika eksik olduğu için de ortaya çıkabilir . Örneğin, benim durumumda Firefox tarayıcısı içeriyor olsa bile " DigiCert SHA2 Secure Server CA " ara sertifikası ca-certificatespakette eksikti . wgetURL'de bu hataya neden olan komutu doğrudan çalıştırarak hangi sertifikanın eksik olduğunu bulabilirsiniz . Ardından , Sertifika Yetkilisinin resmi web sitesinden (örn . Benim durumumda https://www.digicert.com/digicert-root-certificates.htm ) bu sertifika için CRT dosyasına karşılık gelen bağlantıyı arayabilirsiniz . Şimdi, durumunuzda eksik olan sertifikayı dahil etmek için, bunun yerine CRT dosya indirme bağlantınızı kullanarak aşağıdaki komutları çalıştırabilirsiniz:

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

Bundan sonra wget, URL'niz için ve python urllibpaketini kullanarak tekrar test edebilirsiniz . Daha fazla ayrıntı için bkz. Https://bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242


0

VCenter 6'daysanız, bunun yerine vCenter'ınızın vmware sertifika yetkilisi sertifikasını işletim sisteminizin güvenilen CA'lar listesine eklemeniz gerekir. Sertifikanızı indirmek için aşağıdakileri yapın

  1. Web tarayıcınızı açın.
  2. Https: // adresine gidin
  3. Sağ alt köşede Güvenilir Kök CA'yı İndir bağlantısını tıklayın

Fedora'da

  1. uzantıyı açın ve .0'dan .cer'e değiştirin
  2. / Etc / pki / ca-trust / source / anchors / dizinine kopyalayın.
  3. update-ca-trust komutunu çalıştırın.

Bağlantılar:

  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


0

MAC OS X'te nltk için kurulum adımları (python3 (3.6.2) zaten kurulmuştu

sudo easy_install pip

altı önceki sürümünü kaldırmayı yoksaymak için yüklü seçeneğini yoksay seçeneğini kullanırsanız, kaldırırken hata verir ve ileri doğru film yapmaz

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

Pip ve python kurulumunu kontrol edin, '3' versiyonlarını kullanın

which python python2 python3
which pip pip2 pip3

NLTK'nın yüklü olup olmadığını kontrol edin

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

Örnek kitabı yüklemeden önce SSL sertifikası yükleyin, aksi takdirde örnekleri yüklerken hatayı sertifikalandıracağız

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

Bu kitap örnekleri için nltk ve nltk_ata kurulumunu başarıyla tamamladı


0

PyOpenSSLKullanarak yükleme pipbenim için çalıştı (PEM dönüştürmeden):

pip install PyOpenSSL

0

Ben bir proxy etkin ve tekrar deneyin Fiddler (HTTP hata ayıklama proxy) denetimi kapatarak bu sorunu çözüldü.


0

Python 2.7'de C: \ Python27 \ lib \ site-Packages \ certifi \ cacert.pem dosyasının sonuna Güvenilen kök CA ayrıntılarının eklenmesi yardımcı oldu

Bundan sonra (yönetici haklarını kullanarak) pip install --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org packageName çalıştırdım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.