簡體   English   中英

在python 2.7中更新openssl

[英]Updating openssl in python 2.7

想知道是否有人可以解釋openssl如何在python2.7中工作。 我不確定python是否擁有自己的openssl或從本地計算機/環境中獲取它?

讓我解釋一下:(如果我使用Python進行此操作)

>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8x 10 May 2012'

(在終端)

$ openssl version
OpenSSL 0.9.8x 10 May 2012
$ which openssl 
/usr/bin/openssl

現在我更新了openssl(下載。)

$ cd openssl-1.0.1c
$ ./Configure darwin64-x86_64-cc --prefix=/usr --openssldir=/opt/local/etc/openssl shared
$ make
$ sudo make install

這創建了單獨的導演(如指定),所以我將其復制到舊路徑

cp -f /usr/local/ssl/bin/openssl /usr/bin/openssl

現在在終端openssl版本已更新,但不是從python!

$ openssl version
OpenSSL 1.0.1c 10 May 2012

我確實注意到.dylib仍指向舊版本,該如何更改?

$ ls -l /usr/lib/*ssl*
-rwxr-xr-x  1 root  wheel  411680 Jul 17  2012 /usr/lib/libssl.0.9.7.dylib
-rwxr-xr-x  1 root  wheel  602800 May 24 03:43 /usr/lib/libssl.0.9.8.dylib
-rwxr-xr-x  1 root  wheel  390908 Sep  9 17:37 /usr/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel      18 Jul 17  2012 /usr/lib/libssl.dylib -> libssl.0.9.8.dylib

更新 :我更改了鏈接,但在python上仍舊版本。

$ ls -l /usr/lib/*ssl*
-rwxr-xr-x  1 root  wheel  411680 Jul 17  2012 /usr/lib/libssl.0.9.7.dylib
-rwxr-xr-x  1 root  wheel  602800 May 24 03:43 /usr/lib/libssl.0.9.8.dylib
-rwxr-xr-x  1 root  wheel  390908 Sep  9 17:37 /usr/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel      18 Sep 11 15:47 /usr/lib/libssl.dylib -> libssl.1.0.0.dylib

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

在MAC上通過自制軟件將openssl升級到1.0.1j之后,但是系統python仍然引用舊版本0.9.8。 原來,這是稱為openssl的python。 因此,我用brews 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    

您必須使用釀造的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而不是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 15 Oct 2014

到目前為止,我正在Ubuntu 12.04上進行開發。 如果我有Ubuntu 12.04的解決方案,那么我將更新答案。 希望此過程對您有所幫助。

SSL過時是多個平台上的常見問題:

這是一般的方法...

0.安裝OpenSSL

  • 選項I:安裝並行OpenSSL 1.x庫(-dev或-devel)軟件包的系統軟件包。

     # FreeBSD pkg install openssl OPENSSL_ROOT=/usr/local # Mac (brew) brew install openssl # DO NOT DO ANY WEIRD SYMLINK HACKS, ITS KEG-ONLY FOR A REASON! OPENSSL_ROOT="$(brew --prefix openssl)" 
  • 選項II:將OpenSSL從源安裝到臨時目錄

     OPENSSL_ROOT="$HOME/.build/openssl-1.0.1e" curl http://www.openssl.org/source/openssl-1.0.1e.tar.gz | tar zxvf - cd openssl-1.0.1e mkdir -p "$OPENSSL_ROOT" ./config no-hw --prefix="$OPENSSL_ROOT" --openssldir=... # osx (instead of previous line): ./Configure darwin64-x86_64-cc no-hw --prefix="$OPENSSL_ROOT" --openssldir=... make install cd .. rm -rf openssl-1.0.1e 

1. 從源代碼構建Python

  • 選項A :使用pyenv

     export CONFIGURE_OPTS="CPPFLAGS=-I"$OPENSSL_ROOT"/include LDFLAGS=-L"$OPENSSL_ROOT"/lib [your other options here]" pyenv install 2.7.6 
  • 選項B :從源代碼安裝Python

     ./configure CPPFLAGS="-I$OPENSSL_ROOT/include" LDFLAGS="-L$OPENSSL_ROOT/lib" [your other options here]` make # ... # if compiled openssl was used, it can be safely deleted because python's module ssl links openssl statically. 

示例:FreeBSD 9.2(跳過演示make install以進行演示)

pkg install openssl curl gmake gdbm sqlite3 readline ncurses
OPENSSL_ROOT=/usr/local
curl http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz | tar jxvf -
cd Python-2.7.6
./configure CPPFLAGS="-I$OPENSSL_ROOT/include" LDFLAGS="-L$OPENSSL_ROOT/lib" [your other options here]
make
./python -c 'import ssl; print(ssl.OPENSSL_VERSION)' # osx: ./python.exe ...
# prints: OpenSSL 1.0.1e 11 Feb 2013

之后,不再需要臨時的openssl庫,而將帶有openssl的ssl模型靜態插入到python可執行文件中(使用otoolreadelf驗證)。

這可能是由於Python版本過舊。

在Python 2.7.1上運行python -c "import ssl; print ssl.OPENSSL_VERSION" ,我看到我有一個過時的版本: OpenSSL 0.9.7l 28 Sep 2006

好像我的Python版本依賴於不推薦使用的OpenSSL版本,如本論壇所示

對於即將發布的Python 2.7.9版本(計划於12月初發布),我打算讓python.org OS X安裝程序中的Python使用它們自己的OpenSSL版本,因此不再依賴於現在不推薦使用的系統OpenSSL。

我更新至Python 2.7.9,此問題已立即解決。 現在,在運行python -c "import ssl; print ssl.OPENSSL_VERSION" ,我得到OpenSSL 0.9.8za 5 Jun 2014

以下對我有用。 我已經能夠將OpenSSL從0.9.8zh更新到1.0.2o版本,但是python從未訪問過較新的版本,直到找到使用pyenv重新安裝python的建議(使用我想要的2.7.10版本)。

brew update
brew install pyenv

echo 'eval "$(pyenv init -)"' >> .bashrc
source .bashrc

pyenv install 2.7.10
pyenv global 2.7.10

然后檢查...

python --version
Python 2.7.10

python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.2o  27 Mar 2018

我確實必須重新安裝python軟件包。

資料來源: https : //github.com/ianunruh/hvac/issues/75

我認為python已經意識到這是一個問題: https : //www.python.org/downloads/release/python-2715/

注意

注意macOS用戶:從2.7.15開始,所有python.org macOS安裝程序均附帶內置的OpenSSL副本。 此外,macOS 10.9+還有一個新的附加安裝程序變體,其中包括Tcl / Tk 8.6的內置版本。 有關更多信息,請參見安裝程序自述文件。

只需安裝2.7.15,即可解決我的OpenSSL問題。

解決不了任何麻煩,以上都不對我有用。 我最終采取了一種簡單而不復雜的方法。

  1. 從官方站點安裝python 2.7.13,它實際上是作為默認python安裝的,並自動在整個python系統范圍內進行升級(是!)。

https://www.python.org/downloads/mac-osx/

  1. python安裝后升級openssl。 為系統python更新它(是!)。

sudo pip install-升級pyOpenSSL

  1. 您將必須重新安裝所有python模塊(因為您替換了python),我強烈建議您使用pip。 在安裝了pip幾分鍾之后,我的默認OSX python升級了,openssl升級了,我的所有模塊都包括了(包括正在運行的django)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM