2014-06-20 40 views
8

我有一个旧的NAS设备,我有一个Dropbox的上传脚本,最近我已经收到以下错误的Python引用旧SSL版本

SSL certificate error: [Errno 1] _ssl.c:504: error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm

我认为这是由于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

哦,我的,0.9.7 ...你需要迁移到0.9.8。 1.0.1 *不是*二进制兼容。 – jww

+0

您需要针对较新的OpenSSL重新编译Python。 –

+0

@Paul - 静态地执行Python链接?我认为它使用动态链接到OpenSSL。从'Modules/Setup.dist':'-L $(SSL)/ lib -lssl -lcrypto'。如果它的动态,他只需要设置'LD_PRELOAD',指向0.9.8共享对象,然后启动Python。 – jww

回答

5

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

我得到了同样的问题,像你这样的,所以我已搜查几个答案,但它并没有帮助我。

1)Updating openssl in python 2.7

2)Update OpenSSL on OS X with Homebrew

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

通过自制上MAC升级的OpenSSL到1.0.1j后,但系统蟒仍被称为旧版本0.9.8。原来,Python提到了openssl。所以我已经安装了新的python与酿造openssl和完成这个问题在Mac上,还没有Ubuntu。

在Mac OS X版本10.10和系统版本的Python 2.7.6,我的程序如下:

  1. $酿造更新
  2. $ BREW将OpenSSL安装。然后你可以看到openssl版本1.0.1j。
  3. $ brew link openssl --force
  4. $ brew install python --with-brewed-openssl。你必须安装新的Python与酿造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拥有,而不是由Ryan告知的root,但我使用'sudo'。而且,在这个指令之前,我没有/ usr/local/bin/python。在这个指令之后,你可以使用python 2.7.8版本而不是2.7.6。

最后,你可以看到如下:

$蟒蛇--version

的Python 2.7.8

$蟒蛇-c “进口SSL;打印ssl.OPENSSL_VERSION”

OpenSSL的1.0.1j 2014年10月15日

截止现在,我正在使用Ubuntu 12.04。如果我有Ubuntu 12.04的解决方案,那么我会更新我的答案。我希望这个程序可以帮助你。

1

这对我有效。

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 
1

我做了上述所有步骤,仍然遇到同样的问题。我解决我的问题在以前的答案中列出的所有的人之后增加下列命令:

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

希望它能帮助任何人:)

4

在几天后得到了这个工作。 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 

添加以下到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" 

应该给你最新版本的OPEN SSL版本

+0

你刚刚救了我的夜晚!小时失去超级遗憾你失去了日子,但非常感谢你分享这个! –