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 o make
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 :
> build --no-tkinter --no-bsddb -e "/p:PlatformToolset=v141"
para uma compilação de 32 bits ou
> build --no-tkinter --no-bsddb -e -p x64 "/p:PlatformToolset=v141"
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:
> win32\python.exe
Python 2.7.17 (tags/v2.7.17-dirty:c2f86d86e6, Feb 20 2020, 01:04:36) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.1.1d 10 Sep 2019
Eu não fiz nenhum teste além disso.
Em resumo, as mudanças para conseguir isso incluem
- Removido o
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.
- Modificado o
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.
- Modificou o
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 do v3.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.
- Correções aplicadas aos arquivos
Modules/posixmodule.c
e Modules/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ção v2.7.17_ossl_1.1.1
e executando o comando de compilação PCbuild
conforme mencionado acima. Se houver pessoas interessadas, posso limpá-lo e mantê-lo por perto.