在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可执行文件(使用otool
或readelf
validation)。
这可能是因为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
。
解决没有啥,以上都没有为我工作。 我最终采取了一个更简单和简单的方法….
- 从官方网站安装Python 2.7.13,它实际上安装为默认的Python,自动升级旧的Python系统(是的!)。
https://www.python.org/downloads/mac-osx/
- python安装后升级openssl。 更新系统python(yes!)。
sudo pip安装 – 升级pyOpenSSL
- 你将不得不重新安装所有的Python模块(因为你replace了python),我强烈build议使用pip。 几分钟的安装后,我的默认OSX python升级,我有openssl升级,我有我所有的模块(包括Django运行)。
- 如何grep或searchOpenSSL的.jar文件?
- gemeventmachine致命错误:找不到“openssl / ssl.h”文件
- 正确使用HsOpenSSL API来实现TLS服务器
- 准备在PHP 7.2中删除Mcrypt
- 使用OpenSSL“无法写入随机状态”是什么意思?
- 如何使用Python / PyCrypto以OpenSSL兼容的方式对文件进行AESencryption/解密?
- 代码1的SSL操作失败:dh键太小
- 如何在两种公钥格式之间转换,一个是“BEGIN RSA PUBLIC KEY”,另一个是“BEGIN PUBLIC KEY”
- Ruby Bundle找不到符号:_SSLv2_client_method(LoadError)