Python ссылается на старую версию SSL
У меня есть Dropbox upload script в старом ящике nas, который у меня есть, в последнее время я получаю следующую ошибку
Ошибка сертификата 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
Ответы
Ответ 1
Получил это работает через несколько дней. 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
Ответ 2
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 link openssl --force
Warning: Refusing to link: openssl
У меня это работает с
brew install openssl
brew install [email protected]
затем
openssl version
а также
python -c "import ssl; print ssl.OPENSSL_VERSION"
дал мне ту же версию OpenSSL.
Ответ 3
Пожалуйста, обратитесь к http://rkulla.blogspot.kr/2014/03/the-path-to-homebrew.html.
У меня та же проблема, что и у вас, и поэтому я искал несколько ответов, но это не помогло мне.
- Обновление openssl в python 2.7
- Обновите OpenSSL в OS X с помощью Homebrew
- 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 моя процедура выглядит следующим образом.
-
$ brew update
-
$ brew install openssl.
Тогда вы можете увидеть openssl версии 1.0.1j. -
$ brew link openssl --force
-
$ brew install python --with-brewed-openssl.
Вы должны установить новый питон с готовым openssl. Затем вы можете увидеть /usr/local/Cellar/python/2.7.8_2/bin/python. -
$ 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, я обновлю свой ответ. Я надеюсь, что эта процедура поможет вам.
Ответ 4
Я обнаружил, что мне пришлось изменить 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!
Ответ 5
Это сработало для меня.
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
Ответ 6
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
(/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
Ответ 7
Я сделал все шаги выше и все еще получал ту же проблему. Я решил проблему, добавив следующую команду после всех, перечисленных в предыдущих ответах:
brew unlink openssl --force --overwrite python && brew link openssl --force --overwrite python
Надеюсь, это поможет любому:)
Ответ 8
Я использовал macOS Sierra 10.12.6. Я НЕ ИСПОЛЬЗУЮ ГЛАВНУЮ! Я пытался скачать с Vimeo и получил это:
ОШИБКА: невозможно загрузить веб-страницу: (вызвано URLError (SSLError (1, u '[SSL: TLSV1_ALERT_PROTOCOL_VERSION] версия протокола оповещения tlsv1 (_ssl.c: 590)'),))
Это потому, что версия OpenSSL, поставляемая с macOS, устарела. Поэтому я обновил openssl так:
$ curl -O https://www.openssl.org/source/openssl-1.1.1b.tar.gz
$ tar -zxvf openssl-1.1.1b.tar.gz
$ cd openssl-1.1.1b
$ ./config
$ make
$ sudo make install
После этого я проверяю версию openssl:
$ openssl version
OpenSSL 1.1.1b 26 Feb 2019
И проверьте, где это:
$ which openssl
/usr/local/bin/openssl
Но ошибка все равно существует. Затем я проверяю, какая версия Python используется:
$ python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
OpenSSL 0.9.8zh 14 Jan 2016
Это старая устаревшая версия!
Вопрос: как я могу сказать python (и другим приложениям, которые могут использовать openssl) использовать новую версию?
PS версия Python:
$ python --version
Python 2.7.10