
Supongo que tengo razón al suponer (después de buscar en Google) que Python no usa la versión instalada de OpenSSL, sino que usa su propio módulo SSL y debe reconstruirse para actualizarlo.
Esto está en una Raspberry Pi, una pequeña imagen sin GUI basada en Raspbian Jessie. Estoy planeando una reconstrucción completa basada en una distribución actual más adelante, cuando el tiempo lo permita, por ahora solo quiero actualizar los paquetes importantes manualmente.
Cloné la fuente OpenSSL de git, revisé la rama estable 1.1.1 y la construí; solo por defecto configure
, make
y make test
.sudo make install
Ahora estoy intentando reconstruir Python para usar esta versión.
Conseguí que funcionara con Python 3, pero falla en Python 2. Ambos son archivos comprimidos descargados hoy desde www.python.org/downloads/source/, creados con ./configure
y make
sin opciones adicionales.
Resultado de 3.7.3: make tiene éxito y esta prueba también
$ ./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.1.1d-dev xx XXX xxxx
La versión antigua (instalada) de Python informa OpenSSL 1.0.1t tanto para python como para python3, por lo que la nueva compilación utiliza la nueva versión.
Resultado de 2.7.16: make solo tiene éxito parcialmente, pero termina con
Failed to build these modules:
_hashlib _ssl
y sale la misma prueba
$ ./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/src/python/Python-2.7.16/Lib/ssl.py", line 98, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: No module named _ssl
Obtenga resultados al construir esos módulos:
building '_ssl' extension
gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/arm-linux-gnueabihf -I/usr/local/include -I/usr/local/src/python/Python-2.7.16/Include -I/usr/local/src/python/Python-2.7.16 -c /usr/local/src/python/Python-2.7.16/Modules/_ssl.c -o build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_ssl.o
gcc -pthread -shared build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_ssl.o -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-armv7l-2.7/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: build/lib.linux-armv7l-2.7/_ssl.so: undefined symbol: OPENSSL_sk_num
building '_hashlib' extension
gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/arm-linux-gnueabihf -I/usr/local/include -I/usr/local/src/python/Python-2.7.16/Include -I/usr/local/src/python/Python-2.7.16 -c /usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.c -o build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.o -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-armv7l-2.7/_hashlib.so
*** WARNING: renaming "_hashlib" since importing it failed: build/lib.linux-armv7l-2.7/_hashlib.so: undefined symbol: OPENSSL_init_crypto
Respuesta1
Como en mi comentario a la pregunta, la respuesta es sí.
[Editar: primero pensé que eran mis CFLAGS, pero no.]
Finalmente lo tengo. El comando de compilación para el módulo _ssl contiene estos modificadores:
-L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib
La primera de esas dos ubicaciones todavía contenía una versión ANTIGUA (1.0.0) de libssl.so. La versión correcta estaba en el segundo camino.
Lo curioso es que eso parece no haber hecho ninguna diferencia al compilar 3.7.3, solo para 2.7.16.