web-dev-qa-db-fra.com

Mise à jour de openssl en python 2.7

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
24
Peter

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.

33
user2434741

SSL obsolète est un problème courant sur plusieurs plates-formes:

Voici l'approche générale ... 

0. Installer OpenSSL

  • 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
    

1. Construire Python à partir des sources

  • 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.
    

Exemple: FreeBSD 9.2 (ignorer 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).

17
Barry

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.

4
aralar

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.

1
KeelyD

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.

Source: https://github.com/ianunruh/hvac/issues/75

1
bkinnell