Eu instalei o python 2.7.17 em uma máquina com Windows 10. Eu queria testar sua versão openssl executando o seguinte dentro de python:
import ssl
print ssl.OPENSSL_VERSION_INFO
Estou recebendo o (1, 0, 2, 20, 15)
desejo de atualizar para a versão 1.1.1. Fazendo o congelamento do pip, recebo:
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
Estes parecem ser os mais recentes no pip para pyOpenSSL e criptografia.
O openssl que eu instalei (como parte do git bash) é 1.1.1, no entanto, essa não é a mesma versão usada dentro do python.
Como atualizo a versão do openssl incluída no python para 1.1.1 ou superior?
EDIT: Em resposta aos comentários, a seguir é 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 mencionado acima, criptografia e pyOpenSSL são os mais recentes no pip.
python
python-2.7
openssl
windows-10
pyopenssl
Assaf Mendelson
fonte
fonte
py -m OpenSSL.debug
? Você já tentou atualizar cada um dos módulos listados?Respostas:
A única maneira de fazer com que o Python 2.7 use a versão atual do OpenSSL 1.1.1d para seu
ssl
módulo é reconstruí-lo com essa versão do OpenSSL. Para plataformas * nix, isso não é muito difícil; envolve apenas o ajuste de alguns arquivos de configuração inicial. Um teste rápido no macOS mostrou que o código-fonte do Python 2.7 era realmente compatível com a API do OpenSSL 1.1.1d, o que parecia promissor.Para Windows, no entanto, a reconstrução do Python 2.7 com o OpenSSL 1.1.1d é mais difícil. Isso ocorre porque o sistema de compilação, que depende da Microsoft
msbuild
, não é tão fácil de ajustar quanto omake
sistema de compilação baseado no * nix. Você pode ver a solução do Visual Studio, projetos e arquivos de propriedades associados no subdiretório do PythonPCbuild
.Além disso, as diferenças entre as versões do OpenSSL 1.0.2 e 1.1.1 são um pouco maiores no Windows, porque os nomes das bibliotecas também foram alteradas, enquanto permaneceram as mesmas para a versão * nix.
As modificações necessárias no sistema de compilação do Python para Windows não são muito extensas. Parece que consegui o que você estava procurando, depois de fazer a alteração explicada na parte inferior desta resposta. A compilação real pode ser feita com o seguinte comando executado no
PCbuild
subdiretório do Python :para uma compilação de 32 bits ou
para uma compilação de 64 bits. As
--no-
opções são usadas para acelerar o processo e focar no aspecto OpenSSL.v141
significa Visual Studio 2017, você precisa estar em um shell do Visual Studio para que isso funcione. Depois disso, o seguinte reproduziu seu teste mostrando o uso do OpenSSL 1.1.1d com o Python 2.7.17:Eu não fiz nenhum teste além disso.
Em resumo, as mudanças para conseguir isso incluem
libeay
projeto da solução. Isso foi usado para criar o OpenSSL 1.0.2 a partir da fonte, mas não é compatível com o OpenSSL 1.1.1. Em vez disso, a solução agora conta com os binários pré-criados do OpenSSL 1.1.1d, conforme fornecido pelo repositório Python no cpython-bin-deps . É possível recriar o OpenSSL como parte do processo de compilação, mas requer mais modificações.get_externals.bat
script em lote para fazer download das bibliotecas pré-construídas do OpenSSL 1.1.1d do repositório cpython-bin-deps mencionado anteriormente.openssl.props
arquivo de propriedades que define várias das configurações_ssl
e do_hashlib
projeto e também fez algumas alterações nesses projetos. Os ajustes feitos principalmente a partir dov3.8.1
lançamento do Python, para vincular às novas bibliotecas OpenSSL e definir os caminhos de inclusão corretamente. Com essa modificação, o OpenSSL não é mais vinculado estaticamente como costumava ser no 2.7.17, mas dinamicamente vinculado.Modules/posixmodule.c
eModules/timemodule.c
semelhantes a essa correção , para permitir a criação com o Visual Studio 2017 - a mesma versão com a qual os binários OpenSSL pré-criados são criados.A propósito, mais do que o necessário é baixado no processo de compilação atual, incluindo o OpenSSL e o código-fonte nasm. Isso é apenas para permitir o mínimo de modificações possível nos scripts de compilação originais.
Se você estiver interessado nos detalhes, verifique o commit associado neste fork do repositório cpython, que fiz apenas com o objetivo de esclarecer minha resposta. É baseado na etiqueta original
v2.7.17
. Você deve poder reproduzir a compilação verificando essa ramificaçãov2.7.17_ossl_1.1.1
e executando o comando de compilaçãoPCbuild
conforme mencionado acima. Se houver pessoas interessadas, posso limpá-lo e mantê-lo por perto.fonte