[英]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过时是多个平台上的常见问题:
这是一般的方法...
选项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
选项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.
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可执行文件中(使用otool
或readelf
验证)。
这可能是由于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软件包。
我认为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问题。
解决不了任何麻烦,以上都不对我有用。 我最终采取了一种简单而不复杂的方法。
https://www.python.org/downloads/mac-osx/
sudo pip install-升级pyOpenSSL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.