Python ссылается на старую версию SSL

У меня есть скрипт загрузки Dropbox на старом nas box, недавно у меня появилась следующая ошибка

Ошибка сертификата SSL: [Errno 1] _ssl.c:504: ошибка:0D0890A1: подпрограммы кодирования asn1:ASN1_verify: неизвестный алгоритм дайджеста сообщения

Я думаю, это связано с тем, что openssl устарела на коробке

Поэтому я загружаю openssl, собираю его из исходного кода и устанавливаю, теперь, когда я запускаю следующее, оно, кажется, корректно обновляется.

openssl version
OpenSSL 1.0.1h 5 Jun 2014

Но может показаться, что Python все еще ссылается на старую версию, как мне обновить это?

python -c "import ssl; print ssl.OPENSSL_VERSION"
OpenSSL 0.9.7m 23 Feb 2007

7 ответов

Получил это работает через несколько дней. MAC OS X El Captian или выше

 sudo rm -rf /Library/Frameworks/Python.framework/Versions/2.7
 sudo rm -rf "/Applications/Python 2.7"
 cd /usr/local/bin/
 ls -l /usr/local/bin | grep '../Library/Frameworks/Python.framework/Versions/2.7' | awk '{print $9}' | tr -d @ | xargs rm
 brew uninstall python
 brew uninstall openssl
 brew link --force openssl

Теперь установите python и снова откройте openssl, используя brew.

 brew install openssl
 brew install python --with-brewed-openssl

Добавьте следующее в PATH в ~/.bash_profile на вашем MAC

 vi ~/.bash_profile
 export PATH=/usr/local/opt/openssl/bin:/usr/local/opt/python/libexec/bin:$PATH

перезапустить терминал

 python --version (verify if it is picking up the right version)
 openssl version -a (verify if it is picking up the right version)
 python -c "import ssl; print ssl.OPENSSL_VERSION"

(примечание: если вы установили Python3, вам придется обновить print синтаксис на этапе встроенного компилятора)

python -c "import ssl; print(ssl.OPENSSL_VERSION)"

должен дать вам последнюю версию ОТКРЫТАЯ версия SSL

2018 на MacOS
Я пытался с другими ответами без успеха:

  • --with-brewed-openssl вариант дает Warning: python: this formula has no --with-brewed-openssl option so it will be ignored!
  • и команда brew link openssl --force дает Warning: Refusing to link: openssl

У меня это работает с

brew install openssl
brew install python@2

затем

openssl version

а также

python -c "import ssl; print ssl.OPENSSL_VERSION"

дал мне ту же версию OpenSSL.

Пожалуйста, обратитесь к http://rkulla.blogspot.kr/2014/03/the-path-to-homebrew.html.

У меня та же проблема, что и у вас, и поэтому я искал несколько ответов, но это не помогло мне.

  1. Обновление openssl в python 2.7
  2. Обновите OpenSSL в OS X с помощью Homebrew
  3. https://apple.stackexchange.com/questions/126830/how-to-upgrade-openssl-in-os-x

После обновления openssl до 1.0.1j с помощью homebrew на MAC, но системный питон все еще ссылался на старую версию 0.9.8. Оказалось, что питон относится к openssl. Поэтому я установил новый python с brewed openssl и закончил эту проблему на Mac, но не на Ubuntu.

В Mac OS X версии 10.10 и системном Python версии 2.7.6 моя процедура выглядит следующим образом.

  1. $ brew update
  2. $ brew install openssl. Тогда вы можете увидеть OpenSSL версии 1.0.1j.
  3. $ brew link openssl --force
  4. $ brew install python --with-brewed-openssl. Вы должны установить новый питон с готовым openssl. Затем вы можете увидеть /usr/local/Cellar/python/2.7.8_2/bin/python.
  5. $ sudo ln -s /usr/local/Cellar/python/2.7.8_2/bin/python /usr/local/bin/python. Конечно, /usr/local/* должен принадлежать $USER, а не root, о чем говорит Райан, но я использовал 'sudo'. И до этой инструкции у меня не было / usr / local / bin / python. После этой инструкции вы можете использовать Python версии 2.7.8, а не 2.7.6.

Наконец, вы можете видеть как ниже;

$ python --version

Python 2.7.8

$ python -c "import ssl; print ssl.OPENSSL_VERSION"

OpenSSL 1.0.1j 15 октября 2014

До сих пор я работаю над этим на Ubuntu 12.04. Если у меня есть решение для Ubuntu 12.04, я обновлю свой ответ. Я надеюсь, что эта процедура поможет вам.

Я обнаружил, что мне пришлось изменить PATH, чтобы использовать системный (обновленный) SSL:

$ pip install --editable .

Obtaining file:///Users/jhlynch/Projects/flaskr
Collecting flask (from flaskr==0.0.0)
  Could not fetch URL https://pypi.python.org/simple/flask/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661) - skipping
  Could not find a version that satisfies the requirement flask (from flaskr==0.0.0) (from versions: )
No matching distribution found for flask (from flaskr==0.0.0)

$ python -c "import ssl; print(ssl.OPENSSL_VERSION)"

OpenSSL 0.9.8zh 14 Jan 2016                      <<< note older version


$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jhlynch/.nix-profile/bin:/Users/jhlynch/.nix-profile/sbin:/Users/jhlynch/.nix-profile/lib/kde4/libexec:/nix/var/nix/profiles/default/bin:/nix/var/nix/profiles/default/sbin:/nix/var/nix/profiles/default/lib/kde4/libexec:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

$ PATH="/usr/local/bin:/usr/local/sbin:${PATH}"

$ export PATH

$ python -c "import ssl; print(ssl.OPENSSL_VERSION)"

OpenSSL 1.0.2o  27 Mar 2018                       <<< note newer version

$ pip install --editable .

Obtaining file:///Users/jhlynch/Projects/flaskr
Collecting flask (from flaskr==0.0.0)
  Downloading https://files.pythonhosted.org/packages/77/32/e3597cb19ffffe724ad4bf0beca4153419918e7fa4ba6a34b04ee4da3371/Flask-0.12.2-py2.py3-none-any.whl (83kB)
...                <<< works this time!

OSX Sierra, Python 3.7, та же проблема, переустановка / обновление Python и OpenSSL не помогли с этой конкретной проблемой (но я думаю, что она была полезна в любом случае).

Основное решение: очистите ваш $PATH в .bash_profile! Пришлось вручную удалить кучу несвежих папок (/Library/Frameworks/Python.framework/Versions/3.4/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin)

Затем запустите:

brew link --overwrite --dry-run python

Если все выглядит хорошо, повторите без --dry-run:

brew link --overwrite python

Результат:

Linking /usr/local/Cellar/python/3.7.0... 25 symlinks created
~
$  python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2p  14 Aug 2018

Это сработало для меня.

python -c "import ssl; print ssl.OPENSSL_VERSION"
brew link openssl --force
brew install python --with-brewed-openssl
mv /usr/local/bin/python /usr/local/bin/python_old
sudo ln -s /usr/local/Cellar/python/2.7.11/bin/python /usr/local/bin/python

Я использую OSX 10.14.5 Mojave и pyenv.

Проблема, с которой я столкнулся, заключалась в том, что когда Homebrew обновил openssl, Python пришлось искать старую версию. python -c "import ssl; print(ssl.OPENSSL_VERSION)" выдал ошибку:

Библиотека не загружена: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib

После множества попыток решение оказалось следующим:

pyenv uninstall 3.6.8
pyenv install 3.6.8

Волшебная строчка в журналах сборки была:

python-build: используйте openssl@1.1 из homebrew

Я сделал все шаги выше и все еще получал ту же проблему. Я решил свою проблему, добавив следующую команду после всех перечисленных в предыдущих ответах:

brew unlink openssl --force --overwrite python && brew link openssl --force --overwrite python

Надеюсь, это кому-нибудь поможет:)

Пришлось изменить этот ответ для работы с Homebrew 2.2.4 и python3 в MacOS 10.15.3:

brew unlink openssl python3 && brew link openssl python3
echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.bash_profile
Другие вопросы по тегам