2014-06-20 69 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

你剛剛救了我的夜晚!小時失去超級遺憾你失去了日子,但非常感謝你分享這個! –