Instalé python 2.7.17 en una máquina con Windows 10. Entonces quería probar su versión openssl ejecutando lo siguiente dentro de python:
import ssl
print ssl.OPENSSL_VERSION_INFO
Estoy obteniendo (1, 0, 2, 20, 15)
que quería actualizar a la versión 1.1.1. Haciendo congelación pip me sale:
cffi==1.14.0
cryptography==2.8
enum34==1.1.6
ipaddress==1.0.23
pycparser==2.19
pyOpenSSL==19.1.0
six==1.14.0
Estos parecen ser los últimos en pip para pyOpenSSL y criptografía.
El openssl que he instalado (como parte de git bash) es 1.1.1, sin embargo, esta no es la misma versión utilizada dentro de python.
¿Cómo actualizo la versión de openssl incluida en python a 1.1.1 o superior?
EDITAR: en respuesta a los comentarios, lo siguiente es el resultado de python -m OpenSSL.debug:
C:\Users\assaf>python -m OpenSSL.debug
pyOpenSSL: 19.1.0
cryptography: 2.8
cffi: 1.14.0
cryptography's compiled against OpenSSL: OpenSSL 1.1.1d 10 Sep 2019
cryptography's linked OpenSSL: OpenSSL 1.1.1d 10 Sep 2019
Pythons's OpenSSL: OpenSSL 1.0.2t 10 Sep 2019
Python executable: C:\Python27\python.exe
Python version: 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)]
Platform: win32
sys.path: ['', 'C:\\WINDOWS\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
Como se indicó anteriormente, la criptografía y pyOpenSSL son los últimos en pip.
python
python-2.7
openssl
windows-10
pyopenssl
Assaf Mendelson
fuente
fuente
py -m OpenSSL.debug
? ¿Has intentado actualizar cada uno de los módulos enumerados?Respuestas:
La única forma de hacer que Python 2.7 use la versión actual de OpenSSL 1.1.1d para su
ssl
módulo es reconstruirlo con esa versión de OpenSSL. Para las plataformas * nix, esto no es demasiado difícil; solo implica ajustar algunos archivos de configuración inicial. Una prueba rápida en macOS mostró que el código fuente de Python 2.7 era realmente compatible con la API OpenSSL 1.1.1d, por lo que parecía prometedor.Sin embargo, para Windows, reconstruir Python 2.7 con OpenSSL 1.1.1d es más difícil. Esto se debe a que el sistema de compilación, que se basa en el de Microsoft
msbuild
, no es tan fácil de ajustar como elmake
sistema de compilación basado en * nix. Puede ver la solución, los proyectos y los archivos de propiedades de Visual Studio asociados en elPCbuild
subdirectorio de Python .Además, las diferencias entre las versiones OpenSSL 1.0.2 y 1.1.1 son ligeramente mayores en Windows, porque los nombres de las bibliotecas también han cambiado, mientras que se han mantenido igual para la versión * nix.
Sin embargo, las modificaciones requeridas al sistema de compilación de Python para Windows no son demasiado extensas. Parece que pude lograr lo que está buscando, después de hacer el cambio explicado al final de esta respuesta. La compilación real se puede hacer con el siguiente comando ejecutado desde el
PCbuild
subdirectorio Python :para una compilación de 32 bits, o
para una compilación de 64 bits. Las
--no-
opciones se utilizan para acelerar el proceso y centrarse en el aspecto OpenSSL.v141
significa Visual Studio 2017, debe estar en un shell de Visual Studio para que esto funcione. Después de eso, lo siguiente reprodujo su prueba que muestra el uso de OpenSSL 1.1.1d con Python 2.7.17:No hice ninguna prueba más allá de esto.
En resumen, los cambios para lograr esto incluyen
libeay
proyecto de la solución. Esto se utilizó para compilar OpenSSL 1.0.2 desde el origen, pero no es compatible con OpenSSL 1.1.1. En cambio, la solución ahora se basa en los binarios de OpenSSL 1.1.1d preconstruidos según lo provisto por el repositorio de Python en cpython-bin-deps . Reconstruir OpenSSL usted mismo como parte del proceso de construcción es posible pero requiere más modificaciones.get_externals.bat
script por lotes para descargar las bibliotecas precompiladas OpenSSL 1.1.1d del repositorio cpython-bin-deps mencionado anteriormente.openssl.props
archivo de propiedades que configura varias de las configuraciones_ssl
y del_hashlib
proyecto, e hizo algunos cambios en esos proyectos también. Los ajustes se tomaron principalmente delv3.8.1
lanzamiento de Python, para vincular con las nuevas bibliotecas OpenSSL y establecer las rutas de inclusión correctamente. Con esta modificación, OpenSSL ya no está enlazado estáticamente como solía estar en 2.7.17, sino enlazado dinámicamente.Modules/posixmodule.c
yModules/timemodule.c
similares a este parche , para permitir la creación con Visual Studio 2017, la misma versión con la que se crean los binarios OpenSSL preconstruidos.Por cierto, se descargan más cosas de las necesarias en el proceso de compilación actual, incluido el código fuente de OpenSSL y nasm. Esto es solo para permitir la menor cantidad posible de modificaciones a los scripts de compilación originales.
Si está interesado en los detalles, puede consultar la confirmación asociada en esta bifurcación del repositorio de cpython, que hice solo para aclarar mi respuesta. Se basa en la etiqueta original
v2.7.17
. Debería poder reproducir la compilación revisando esa ramav2.7.17_ossl_1.1.1
y ejecutando el comando de compilaciónPCbuild
como se mencionó anteriormente. Si hay suficientes personas interesadas, puedo limpiarlo y conservarlo.fuente