[英]Python referencing old SSL version
我在舊的 nas 盒子上有一個 Dropbox 上傳腳本,最近我收到以下錯誤
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
幾天后得到了這個工作。 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
現在使用 brew 再次安裝 python 和 openssl。
brew install openssl
brew install python --with-brewed-openssl
將以下內容添加到 MAC 上 ~/.bash_profile 中的 PATH
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)"
應該給你最新版本的 OPEN 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 。
我遇到了和你一樣的問題,所以我搜索了幾個答案,但沒有幫助我。
在 MAC 上通過 homebrew 將 openssl 升級到 1.0.1j 后,但系統 python 仍然指的是舊版本 0.9.8。 原來python指的是openssl。 所以我用 brewed openssl 安裝了新的 python 並在 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.
您必須使用 brewed openssl 安裝新的 python。 然后,你可以看到/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 擁有,而不是由 Ryan 告訴的 root 擁有,但我使用了 'sudo'。 而且,在此指令之前,我沒有 /usr/local/bin/python。 在此說明之后,您可以使用 python 版本 2.7.8 而不是 2.7.6。最后,您可以看到如下內容;
$ python --version
蟒蛇 2.7.8
$ python -c "import ssl; print ssl.OPENSSL_VERSION"
OpenSSL 1.0.1j 2014 年 10 月 15 日
到現在為止,我正在 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 對這個特定問題沒有幫助(但我猜無論如何還是有用的)。
基本解決方案:清理.bash_profile
的 $PATH ! 我不得不手動刪除一堆陳舊的目錄( /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
我做了上面的所有步驟,但仍然遇到同樣的問題。 我解決了在前面答案中列出的所有命令之后添加以下命令的問題:
brew unlink openssl --force --overwrite python && brew link openssl --force --overwrite 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
必須修改此答案才能在 MacOS 10.15.3 上使用 Homebrew 2.2.4 和 python3:
brew unlink openssl python3 && brew link openssl python3
echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.bash_profile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.