je me demande si quelqu'un pourrait expliquer le fonctionnement de openssl dans python2.7 . Je ne sais pas si python a son propre openssl ou s'il le récupère à partir de la machine locale/env
laissez-moi vous expliquer: (si je le fais en Python)
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8x 10 May 2012'
(En terminal)
$ openssl version
OpenSSL 0.9.8x 10 May 2012
$ which openssl
/usr/bin/openssl
maintenant j'ai mis à jour openssl (téléchargé.)
$ cd openssl-1.0.1c
$ ./Configure darwin64-x86_64-cc --prefix=/usr --openssldir=/opt/local/etc/openssl shared
$ make
$ Sudo make install
cela a créé un directeur séparé (comme spécifié), donc je l'ai copié dans l'ancien chemin
cp -f /usr/local/ssl/bin/openssl /usr/bin/openssl
maintenant dans le terminal openssl la version a été mise à jour mais pas à partir de python!
$ openssl version
OpenSSL 1.0.1c 10 May 2012
J'ai remarqué que .dylib pointe toujours vers une ancienne version, comment puis-je changer cela?
$ 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
Mise à jour: J'ai changé le lien et j'ai toujours l'ancienne version sur 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
Veuillez vous référer à http://rkulla.blogspot.kr/2014/03/the-path-to-homebrew.html
Après la mise à niveau de openssl vers 1.0.1j par homebrew sur MAC, le système python faisait toujours référence à l’ancienne version 0.9.8. Il s’est avéré que le python fait référence à openssl. J'ai donc installé un nouveau python avec OpenSL brassé et terminé ce problème sur Mac, pas encore Ubuntu.
Sous Mac OS X version 10.10 et python système version 2.7.6, ma procédure est la suivante:
$ brew update
$ brew install openssl
Ensuite, vous pouvez voir la version 1.0.1j de openssl.
$ brew link openssl --force
$ brew install python --with-brewed-openssl
Vous devez installer un nouveau python avec OpenSL brassé. Ensuite, vous pouvez voir /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
Bien sûr,/usr/local/* devrait appartenir à $ USER, pas à root, comme le dit Ryan, mais j’ai utilisé «Sudo». Et, avant cette instruction, je n'avais pas/usr/local/bin/python. Après cette instruction, vous pouvez utiliser python version 2.7.8 et non 2.7.6.
Enfin, vous pouvez voir comme des belows;
$ python --version
Python 2.7.8
$ python -c "import ssl; print ssl.OPENSSL_VERSION"
OpenSSL 1.0.1j 15 Oct 2014
Jusqu'à présent, je travaille dessus sous Ubuntu 12.04. Si j'ai une solution pour Ubuntu 12.04, je mettrai à jour ma réponse. J'espère que cette procédure vous aidera.
SSL obsolète est un problème courant sur plusieurs plates-formes:
Voici l'approche générale ...
Option I: Installez les packages système des packages OpenSSL 1.x libs (-dev ou -devel) côte à côte.
# 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)"
Option II: Installer OpenSSL de la source dans un répertoire temporaire
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
Option A: Utilisez pyenv :
export CONFIGURE_OPTS="CPPFLAGS=-I"$OPENSSL_ROOT"/include LDFLAGS=-L"$OPENSSL_ROOT"/lib [your other options here]"
pyenv install 2.7.6
Option B: Installer Python à partir des sources
./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
à des fins de démonstration)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
Ensuite, les bibliothèques openssl temporaires ne sont plus nécessaires avec le modèle SSL avec openssl de manière statique dans l’exécutable python (vérifiez avec otool
ou readelf
).
Cela pourrait être dû à une version obsolète de Python.
Après avoir exécuté python -c "import ssl; print ssl.OPENSSL_VERSION"
sur Python 2.7.1, j'ai constaté que j'avais cette version obsolète: OpenSSL 0.9.7l 28 Sep 2006
.
Il semble que ma version de Python repose sur une version obsolète d’OpenSSL, comme indiqué par ce forum :
Pour la prochaine version 2.7.9 de Python (prévu pour début décembre), j’ai l’intention d’avoir les Pythons au format Les installateurs python.org OS X utilisent leurs propres versions d’OpenSSL et donc pas plus dépendre du système maintenant obsolète OpenSSL.
J'ai mis à jour vers Python 2.7.9 et le problème a été immédiatement résolu. Maintenant, après avoir exécuté python -c "import ssl; print ssl.OPENSSL_VERSION"
, je reçois OpenSSL 0.9.8za 5 Jun 2014
.
Je pense que python a reconnu qu'il s'agissait d'un problème: https://www.python.org/downloads/release/python-2715/
Remarque
À l'attention des utilisateurs de macOS: à compter de la version 2.7.15, tous les installateurs de python.org macOS expédier avec une copie intégrée de OpenSSL. De plus, il y a un nouveau variante d’installateur supplémentaire pour macOS 10.9+ intégrant une extension intégrée version de Tcl/Tk 8.6. Consultez le programme d'installation README pour plus d'informations.
Simplement installer 2.7.15 corrigé mes problèmes OpenSSL.
Ce qui suit a fonctionné pour moi. J'étais déjà capable de mettre à jour OpenSSL de la version 0.9.8zh vers une version 1.0.2o, mais python n'a jamais accédé à la version la plus récente jusqu'à ce que cette suggestion d'utiliser pyenv pour réinstaller python (avec la version 2.7.10, la version que je voulais).
brew update
brew install pyenv
echo 'eval "$(pyenv init -)"' >> .bashrc
source .bashrc
pyenv install 2.7.10
pyenv global 2.7.10
et ensuite vérifier ...
python --version
Python 2.7.10
python -c 'import ssl; print ssl.OPENSSL_VERSION'
OpenSSL 1.0.2o 27 Mar 2018
Je devais bien sûr réinstaller les paquets python.