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-адресі, і це можна успішно перевірити за допомогою загальних довірених сертифікатів. Тому вам краще не намагатися обійти перевірку сертифікату, а виправити це. Яку версію python ви використовуєте?
Steffen Ullrich

Це може бути пов’язано з stackoverflow.com/a/27826829/3081018 . Сервер використовує однотипний ланцюжок сертифікатів з декількома трастами довіри. Подивіться там, який файл файлів, можливо, потрібно використовувати для підтвердження.
Steffen Ullrich

7
Ця помилка також виникає на Python 3.5 після оновлення до
йосеміту

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 пропонує увімкнути перевірку підписів сертифікатів X509, а також перевірку імені хоста для HTTP-клієнтів Python за замовчуванням, за умови відмови на основі дзвінка. Ця зміна буде застосована до 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)

Він також має дуже обережний варіант через monkeypatching, який ви часто не бачите в python:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

Яка переосмислює функцію за замовчуванням для створення контексту з функцією створення неперевіреного контексту.

Зверніть увагу на це, як зазначено в PEP:

Це керівництво спрямоване насамперед на системних адміністраторів, які бажають прийняти новіші версії Python, які реалізують цей PEP у застарілих середовищах, які ще не підтримують перевірку сертифікатів на HTTPS-з'єднаннях. Наприклад, адміністратор може відмовитись, додавши маніпулятор вище в sitecustomize.py в їх Стандартну операційну середу для Python. Програми та бібліотеки НЕ БУДУТЬ розширювати цей процес змін (за винятком, можливо, відповіді на налаштування конфігурації, керованого адміністратором системи).

Якщо ви хочете прочитати документ про те, чому не валідація сертифікатів погана в програмному забезпеченні, ви можете знайти її тут !


1
Отже, якщо ця помилка не дає мені використовувати, setup.py uploadяк я можу це виправити?
pyCthon

5
ssl._create_default_https_context = ssl._create_unverified_context це працювало для мене, як згадував Ноелкд наприкінці. Оскільки наш сайт - інтранет для принтерів HP ... використовується виключно для вискоблювання ... у нас немає проблем із використанням цього методу.
ihightower

Перший спосіб є найменш бажаним - обхідне підтвердження. Чому той, який фактично підтверджує сертифікат, не вказаний першим?
jww

1
це також може статися, якщо у вас є застаріла версія openSSL. Тож для мене працювало оновлення до останньої версії certifi та оновлення openssl на полях.
myusuf3

1
context це те, що мені було потрібно
prayagupd

382

Це не є вирішенням вашої конкретної проблеми, але я викладаю це, оскільки ця нитка є головним результатом Google для "SSL: CERTIFICATE_VERIFY_FAILED", і це веде мене на погоню за дикими гусками.

Якщо ви встановили Python 3.6 на OSX і отримуєте помилку "SSL: CERTIFICATE_VERIFY_FAILED" при спробі підключення до https: // сайту, це, мабуть, тому, що Python 3.6 на OSX взагалі не має сертифікатів і не може перевірити будь-який SSL з'єднання. Це зміна для 3.6 на OSX і вимагає кроку після встановлення, який встановлює 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
Безпосередньо запустіть / Програми / Python \ 3.6 / Install \ Certificates.com і вирішіть мою проблему на 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, і це рішення спрацювало чудово.
Джеймс

4
Це вирішило, що я /Applications/Python\ 3.7/Install\ Certificates.command запускаю це безпосередньо в terminal! Дякую @CraigGlennie & @muyong Я вдячний out-of-the-box-thinkingза розміщення цього тут!
JayRizzo

6
Python 3.7 на macOS Mojave: тут він не працює. Я видалив / перевстановив / запустив сертифікат встановлення, перезавантажив тощо. Для мене не працює
Thomas

71

Щоб розширити відповідь Крейга Гленні:

в Python 3.6.1 на MacOs Sierra

Введення цього в терміналі 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
гіперум

1
Якщо використання командного рядка вас змушує (мабуть, не, якщо ви тут, але ей), ви також можете знайти папку Applications (або еквівалент на інших ОС), яку створив Python під час встановлення, а потім відкрийте сценарій подвійним клацанням миші. Конкретна назва папки залежить від встановленої вами версії Python.
Ердőс-Бекон

Працював як шарм для Python 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.pemне існує в Python 2.7.10. І питання про urllib2неrequests
Кевін Сміт

2
Найкраще рішення поки що, API twitter використовує сертифікат DigiCert, який відсутній у файлі cacert.pem мого пітона. Я додав туди і VOILA!
digz6666

2
Працював над Debian. Для записів, шлях до файлу на моїй системі було: /usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem. Дякую!
ofavre

На жаль, запити python не використовують довірений центр зберігання даних CA. github.com/requests/requests/isissue/2966 . Ви повинні встановити REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/isissue/111#issuecomment-406839514 .
джамшид

Працює в ОС Windows 10, Python 3.6, з API Google і Twitter та модулем запитів взагалі.
brittenb

36

Моє рішення для Mac OS X:

1) Оновіть до Python 3.6.5 за допомогою нативної програми встановлення Python, завантаженої з офіційного веб-сайту мови Python https://www.python.org/downloads/

Я виявив, що цей інсталятор піклується про оновлення посилань та посилань на новий Python набагато краще, ніж домашній.

2) Встановіть новий сертифікат, використовуючи "./Install Certificates.command", який знаходиться в оновленому каталозі Python 3.6

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

Працював як шарм у Mac OS X.
Ману Матвій

31

Ви можете спробувати додати це до змінних оточення:

PYTHONHTTPSVERIFY=0 

Зауважте, що це вимкне всю перевірку HTTP, тому це трохи підхід кувалди, однак якщо перевірка не потрібна, це може бути ефективним рішенням.


17
Я підозрюю, що відключення верифікації HTTP для всіх python трохи надмірне, щоб мати справу з однією помилкою в перевірці. Є дуже багато випадків, коли, можливо, потрібна перевірка за замовчуванням.
trevorKirkby

Працював для мене на Windows Server 2016 на python 2.7.13. У мене зазвичай не встановлено python на серверах Windows, але він був потрібний для оновлення vCenter з міграцією Nexus 1000v до VDS, і це просто виправляє проблему з самостійно підписаним сертифікатом vCenter на даний момент (буде використовувати VMCA та дійсні сертифікати в оновлене середовище). Мені не пощастило прийняти сертифікат, редагуючи cacert.pem в пакет запитів python
Крістофер Торджуссен

3
Крім того, я встановлюю змінну безпосередньо у вікні командного рядка перед запуском скрипту, тому він не буде відключати всі перевірки, наприклад, @ хто-небудь або інші бояться, чого я теж не рекомендував би.
Крістофер Торюссен

Це ідеально підходить для мого використання: тестування. Я б ніколи цього не робив на виробництві, але для запуску тестів, які не мають нічого спільного з SSL, це чудовий варіант.
sorin

Дякую, це рішення зробило це для мене: import os os.environ ["PYTHONHTTPSVERIFY"] = "0"
mbello

28

У мене була подібна проблема, хоча я використовував urllib.request.urlopenу Python 3.4, 3.5 та 3.6 . (Це частина еквівалента Python 3 urllib2, відповідно до примітки на голові urllib2сторінки документації Python 2. )

Моє рішення полягало в pip install certifiустановці certifi, яка має:

... ретельно підготовлена ​​колекція кореневих сертифікатів для перевірки надійності SSL-сертифікатів під час перевірки особи хостів TLS.

Потім, у своєму коді, де раніше я був:

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-01-01): Станом на Python 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_locationsмутує SSLContextпримірник і повертається 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


випробував це рішення в середовищі Дженкінса, особистому середовищі, це працює!
rapport89

2
Це вкрай небезпечно, оскільки воно обходить ВСІ сертифікати, використовуйте на свій страх і ризик, і для любові БУДЬ-хто не використовує це у виробничому коді.
dragon788

Дякую. Нарешті це спрацювало. Не обов’язково, щоб Python 3.6 був встановлений у розділі / Програми на Mac OS. Це має бути прийнятою відповіддю.
Біранчі

Ніколи не слід робити такі маніпулювання. Це вкрай небезпечно і вплине на все використання коду нижче.
Acumenus

10

Як я вже писав у коментарі, ця проблема, ймовірно, пов'язана з цією відповіддю .

Коротше кажучи: існує кілька способів перевірити сертифікат. Підтвердження, яке використовується OpenSSL, не сумісне з довіреними кореневими сертифікатами, які ви маєте у вашій системі. OpenSSL використовується Python.

Ви можете спробувати отримати відсутній сертифікат для громадського первинного сертифікаційного центру Verisign Class 3, а потім скористатися cafileпараметром відповідно до документації Python :

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

Чи можете ви допомогти мені PLZ вирішити цю проблему у посиланні на
Немає

8

У мене була подібна проблема на одній із моїх машин Linux. Генерування свіжих сертифікатів та експорт змінної середовища, що вказує на каталог сертифікатів, виправили це для мене:

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

7

Мені потрібно додати ще одну відповідь, тому що, як і Крейг Гленні, я пішов на погоню за дикими гусками через багато дописів, що стосуються цієї проблеми в Інтернеті.

Я використовую 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
Ганеш Чоудхарі Саданала

4

Для Python 3.4+ на Centos 6/7, Fedora , просто встановіть надійний CA таким чином:

  1. Скопіюйте CA.crt в /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract

2
Може бути дурним питанням, але що таке CA.crt і де його знайти?
Ікбал

4

Рішення для Анаконда

Моя установка - Anaconda Python 3.7 на MacOS з проксі. Шляхи різні.

  • Ось як ви отримуєте правильний шлях сертифікатів:
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просто не існує.

  • Шлях, наданий командами нижче, - це WRONG шлях

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH

3

Я бовтаю голову напівсоромно, оскільки у мене був той самий випуск, за винятком того, що в моєму випадку URL, в який я потрапляв, був дійсним, сертифікат був дійсним. Невірно було моє з'єднання з Інтернетом. Мені не вдалося додати дані про проксі в браузер (IE в цьому випадку). Це зупинило процес перевірки правильно.
Додано інформацію про проксі, і мій python тоді був дуже радий.


1
Не соромтесь головою за те, що щось забули, а потім розібраєтесь та поділитесь, хтось може вважати це корисним. Використовуючи IE, хоча ... ганьба: p
Давос

3

Python 2.7.12 (за замовчуванням, 29 липня 2016, 15:26:22) виправив згадану проблему. Ця інформація може допомогти комусь іншому.


3
Я зіткнувся з цим 2.7.12 на Mac, використовуючи бібліотеку urllib2, використовуючи бібліотеку реквітів, здається, добре
маркадій

@marcadian Встановлення та використання certifi, що, мабуть, було частиною сертифікатів, що зберігаються requests, вирішило для мене проблему на Python 3.4 до 3.6 .
hBy2Py

3

Я здивований, що ці інструкції не вирішили моєї проблеми. Тим не менш, діагностика правильна (BTW, я використовую Mac і Python3.6.1). Отже, підсумовуючи правильну частину:

  • На Mac, Apple скидає OpenSSL
  • Зараз Python використовує власний набір сертифіката кореневих програм CA
  • Установка бінарного Python надала сценарій для встановлення сертифікату кореневого сертифіката CA, необхідного Python ("/ Applications / Python 3.6 / Install Certificates.command")
  • Докладніше читайте "/ Програми / Python 3.6 / ReadMe.rtf"

Для мене скрипт не працює, і всі ті встановлення certifi та openssl теж не вдалося виправити. Можливо тому, що у мене є кілька установок python 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

Як і ви, я використовую python 2.7 на своєму старому iMac (OS X 10.6.8), я також зіткнувся з проблемою, використовуючи urllib2.urlopen:

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

Мої програми працювали нормально без проблем із сертифікатами SSL і раптом (після завантаження програм) вони зазнали аварії з цією помилкою SSL.

Проблема полягала у використанні версії python:

  1. Немає проблем із https://www.python.org/downloads та python-2.7.9-macosx10.6.pkg

  2. проблема з інстальованим інструментом Homebrew : "варити встановити python", версія знаходиться в / usr / local / bin.

Розділ, який називається Certificate verification and OpenSSL [CHANGED for Python 2.7.9], /Applications/Python 2.7/ReadMe.rtfпояснює проблему з багатьма деталями.

Отже, перевірте, завантажте та вставте у свій PATH правильну версію python.


2

Python 2.7 на Amazon EC2 з centOS 7

Мені довелося встановити змінну env, SSL_CERT_DIRщоб вказати на мій, ca-bundleякий знаходився в/etc/ssl/certs/ca-bundle.crt


Ви у відповідь привели мене до правильного шляху для мене. На Убунту, я повинен був встановити SSL_CERT_DIRна /etc/ssl/certs, а також переконайтеся , що ca-certificatesбув встановлений і до теперішнього часу пакет.
Норман


1

Спробуйте

pip install --trusted-host pypi.python.org назва пакета

Це працювало для мене.


1

Подивись на

/ Програми / Python 3.6 / Встановити сертифікати.command

Ви також можете перейти до програми Aplications and click на Certificate.command


1

У моєму випадку я отримував цю помилку, оскільки requestsі urllib3версії були несумісними, що дало таку помилку під час встановлення:

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

Ще одне рішення Anaconda.Я отримував CERTIFICATE_VERIFY_FAILED в моєму середовищі Python 2.7 на macOS. Виявляється, конди були поганими:

базове (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

Помилка SSL: CERTIFICATE_VERIFY_FAILED також може виникнути через відсутність проміжного сертифіката в ca-certificatesпакеті Linux. Наприклад, у моєму випадку проміжний сертифікат " DigiCert SHA2 Secure Server CA " відсутній у ca-certificatesпакеті, навіть якщо браузер Firefox включає його. Дізнатися, який сертифікат відсутній, натиснувши wgetкоманду над URL-адресою, що викликає цю помилку. Тоді ви можете шукати відповідне посилання на файл CRT для цього сертифіката на офіційному веб-сайті (наприклад, https://www.digicert.com/digicert-root-certificate.htm в моєму випадку) Сертифіката. Тепер, щоб включити сертифікат, який відсутній у вашому випадку, ви можете виконати команди нижче, використовуючи замість цього посилання для завантаження файлів 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

Після цього ви можете спробувати ще раз wgetсвою URL-адресу, а також за допомогою urllibпакету python . Детальніше див. На веб-сторінці : https://bugs.launchpad.net/ubuntu/+source/ca-certificate/+bug/1795242


0

Якщо ви перебуваєте на vCenter 6, замість цього вам слід додати сертифікат сертифікату vmware для вашого vCenter до списку ваших ОС, що надійні. Для завантаження сертифікату виконайте наступне

  1. Відкрийте веб-браузер.
  2. Перейдіть до https: //
  3. У нижньому правому куті натисніть посилання Завантажити довірений корінь CA

На Fedora

  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

Він заявив , що він знаходиться на OS X, які не VCENTER 6.
jww

0

встановлення кроків для nltk (у мене був python3 (3.6.2), встановлений уже в MAC OS X

sudo easy_install pip

використовувати ігнорований встановлений варіант, щоб ігнорувати видалення попередньої версії шести, інакше, вона видає помилку під час видалення та не знімає фільм вперед

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

Встановлення з PyOpenSSLвикористанням pipпрацюваних для мене (без перетворення на PEM):

pip install PyOpenSSL

0

Цю проблему я вирішив, закривши Fiddler (проксі-сервер налагодження HTTP), якщо у вас активований проксі, і спробуйте ще раз.


0

У python 2.7 додавання довірених кореневих даних CA в кінці у файл C: допомогли \ Python27 \ lib \ site-пакети \ certifi \ cacert.pem

після цього я запустив (використовуючи права адміністратора) установку pip --trusted-хост pypi.python.org --trusted-хост pypi.org --trusted-хост files.pythonhosted.org packageName

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.