Actualización de openssl en python 2.7

preguntándose si alguien puede explicar cómo funciona openssl en python2.7. ¿No estoy seguro de si Python tiene su propio openssl o lo recoge de la máquina local / env?

Déjame explicarte: (si hago esto 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 

Ahora actualicé openssl (descargado).

 $ cd openssl-1.0.1c $ ./Configure darwin64-x86_64-cc --prefix=/usr --openssldir=/opt/local/etc/openssl shared $ make $ sudo make install 

esto creó un director independiente (según lo especificado), así que lo copié en la ruta anterior

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

¡Ahora en la versión de openssl de la terminal se ha actualizado pero no de python!

 $ openssl version OpenSSL 1.0.1c 10 May 2012 

Noté que .dylib todavía apunta a una versión anterior, ¿cómo puedo cambiar esto?

 $ 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 

Actualización : Cambié el enlace que aún tengo versión anterior en 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 

Consulte http://rkulla.blogspot.kr/2014/03/the-path-to-homebrew.html

Después de actualizar openssl a 1.0.1j por homebrew en MAC, pero el sistema python aún se refería a la versión anterior 0.9.8. Resultó que el python referido openssl. Así que instalé python nuevo con openssl preparado y terminé este problema en Mac, aún no en Ubuntu.

En Mac OS X versión 10.10 y sistema python versión 2.7.6, mi procedimiento es el siguiente:

 $ brew update $ brew install openssl 

Entonces puedes ver la versión de openssl 1.0.1j.

 $ brew link openssl --force $ brew install python --with-brewed-openssl 

Tienes que instalar el nuevo python con openssl preparado. Luego, puede ver /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

Por supuesto, / usr / local / * debe ser propiedad de $ USER, no de root, como dice Ryan, pero usé ‘sudo’. Y, antes de esta instrucción, no tenía / usr / local / bin / python. Después de esta instrucción, puede usar la versión 2.7.8 de Python, no 2.7.6.

Finalmente, puedes ver como belows;

 $ python --version Python 2.7.8 $ python -c "import ssl; print ssl.OPENSSL_VERSION" OpenSSL 1.0.1j 15 Oct 2014 

Hasta ahora, estoy trabajando en ello en Ubuntu 12.04. Si tengo una solución para Ubuntu 12.04, actualizaré mi respuesta. Espero que este procedimiento te ayude.

SSL desactualizado es un problema común en múltiples plataformas:

Aquí está el enfoque general …

0. Instalar OpenSSL

  • Opción I: Instalar paquetes de sistema de paquetes de bibliotecas de OpenSSL 1.x lado a lado (-dev o -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)" 
  • Opción II: instalar OpenSSL desde la fuente a un directorio temporal

     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. Construyendo Python desde la fuente

  • Opción A : usar pyenv :

     export CONFIGURE_OPTS="CPPFLAGS=-I"$OPENSSL_ROOT"/include LDFLAGS=-L"$OPENSSL_ROOT"/lib [your other options here]" pyenv install 2.7.6 
  • Opción B : instalar Python desde la fuente

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

Ejemplo: FreeBSD 9.2 (omitiendo make install para propósitos de demostración)

 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 

Después, ya no se necesitan bibliotecas temporales de openssl b / c el modelo ssl con openssl estáticamente en el ejecutable de python (verifique con otool o readelf ).

Esto podría deberse a una versión desactualizada de Python.

Después de ejecutar python -c "import ssl; print ssl.OPENSSL_VERSION" en Python 2.7.1, vi que tenía esta versión obsoleta: OpenSSL 0.9.7l 28 Sep 2006 .

Parece que mi versión de Python dependía de una versión obsoleta de OpenSSL, como lo indica este foro :

Para la próxima versión de Python 2.7.9 (prevista para principios de diciembre), tengo la intención de que los instaladores de Pythons en python.org OS X utilicen sus propias versiones de OpenSSL y, por lo tanto, ya no dependan del sistema OpenSSL, actualmente en desuso.

Actualicé a Python 2.7.9 y el problema se solucionó de inmediato. Ahora, después de ejecutar python -c "import ssl; print ssl.OPENSSL_VERSION" , obtengo OpenSSL 0.9.8za 5 Jun 2014 .

Lo siguiente funcionó para mí. Ya pude actualizar OpenSSL de 0.9.8zh a una versión 1.0.2o, pero python nunca accedió a la versión más reciente hasta que encontré esta sugerencia de usar pyenv para reinstalar python (con 2.7.10, la versión que quería).

 brew update brew install pyenv echo 'eval "$(pyenv init -)"' >> .bashrc source .bashrc pyenv install 2.7.10 pyenv global 2.7.10 

y luego para comprobar …

 python --version Python 2.7.10 python -c 'import ssl; print ssl.OPENSSL_VERSION' OpenSSL 1.0.2o 27 Mar 2018 

Tuve que reinstalar paquetes de python por supuesto.

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

Creo que Python ha reconocido que este es un problema: https://www.python.org/downloads/release/python-2715/

Nota

Atención a los usuarios de macOS: a partir de la 2.7.15, todos los instaladores de macOS de python.org se envían con una copia integrada de OpenSSL. Además, hay una nueva variante de instalación adicional para macOS 10.9+ que incluye una versión integrada de Tcl / Tk 8.6. Consulte el archivo README del instalador para obtener más información.

Simplemente instalando 2.7.15 solucioné mis problemas de OpenSSL.

No se solucionaron problemas, ninguno de los anteriores funcionó para mí. Terminé tomando un enfoque más simple y sin complicaciones …

  1. Instale python 2.7.13 desde el sitio oficial, en realidad se instala como el python predeterminado, actualizando automáticamente el sistema antiguo de python (¡sí!).

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

  1. Actualiza openssl después de la instalación de Python. Actualizándolo para el sistema python (¡sí!).

instalar sudo pip – actualizar pyOpenSSL

  1. Tendrá que volver a instalar todos sus módulos de Python (porque reemplazó a Python), le recomiendo usar pip. Después de unos minutos de instalación de pip, se actualizó Python de OSX por defecto, se había actualizado openssl y todos mis módulos (incluido el django en ejecución).