在python 2.7中更新openssl

想知道是否有人可以请解释如何openssl在python2.7工程。 我不知道如果python有自己的openssl或从本地机器/ env拿起它?

让我解释一下:(如果我在Python中这样做)

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

(在docker)

 $ 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 

这创build了独立的导演(如指定),所以我把它复制到旧path

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

现在在terminalopenssl版本已经更新,但不是从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。 原来python提到了openssl。 所以我已经安装了新的Python与酿造openssl和完成这个问题在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 

你必须安装新的Python与酿造openssl。 然后,你可以看到/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 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的解决scheme,那么我会更新我的答案。 我希望这个程序可以帮助你。

过时的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)" 
  • 选项二:从源代码安装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. 从源代码构buildPython

  • 选项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静态地进入python可执行文件(使用otoolreadelfvalidation)。

这可能是因为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版本(计划在十二月初),我打算让python.org OS X安装程序中的Pythons使用他们自己的OpenSSL版本,因此不再依赖于现在弃用的系统OpenSSL。

我更新到Python 2.7.9,问题立即解决。 现在,运行python -c "import ssl; print ssl.OPENSSL_VERSION" ,我得到了OpenSSL 0.9.8za 5 Jun 2014

解决没有啥,以上都没有为我工作。 我最终采取了一个更简单和简单的方法….

  1. 从官方网站安装Python 2.7.13,它实际上安装为默认的Python,自动升级旧的Python系统(是的!)。

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

  1. python安装后升级openssl。 更新系统python(yes!)。

sudo pip安装 – 升级pyOpenSSL

  1. 你将不得不重新安装所有的Python模块(因为你replace了python),我强烈build议使用pip。 几分钟的安装后,我的默认OSX python升级,我有openssl升级,我有我所有的模块(包括Django运行)。