Python 引用旧 SSL 版本

2025-02-18 09:24:00
admin
原创
66
摘要:问题描述:我有一个旧的 nas 盒子,里面有一个 Dropbox 上传脚本,最近我收到了以下错误SSL 证书错误:[Errno 1] _ssl.c:504:错误:0D0890A1:asn1 编码例程:ASN1_verify:未知消息摘要算法我认为这是由于 openssl 在盒子上已过时因此我下载了 opens...

问题描述:

我有一个旧的 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

解决方案 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

现在使用 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 版本

解决方案 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 install openssl
brew install python@2

然后

openssl version

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

给了我相同的 OpenSSL 版本。

解决方案 3:

请参阅http://rkulla.blogspot.kr/2014/03/the-path-to-homebrew.html

我遇到了和你同样的问题,因此我搜索了几个答案,但没有帮助。

  1. 在 python 2.7 中更新 openssl

  2. 使用 Homebrew 在 OS X 上更新 OpenSSL

  3. https://apple.stackexchange.com/questions/126830/how-to-upgrade-openssl-in-os-x

在 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上,我的程序如下。

  1. $ brew update

  2. $ brew install openssl.然后可以看到openssl版本1.0.1j。

  3. $ brew link openssl --force

  4. $ brew install python --with-brewed-openssl. 您必须使用 brewed openssl 安装新的 python。然后,您可以看到 /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,这是 Ryan 告诉我的,但我使用了“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 2014 年 10 月 15 日

到目前为止,我正在 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:

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

解决方案 6:

这对我有用。

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

解决方案 7:

我完成了上述所有步骤,但仍然遇到同样的问题。我在前面的答案中列出的所有命令后添加以下命令解决了我的问题:

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

希望它能帮助到任何人:)

解决方案 8:

我正在运行 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:使用homebrew 中的openssl@1.1

解决方案 9:

必须修改这个答案才能在 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
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3975  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2742  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   80  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   88  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   77  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用