Как установить openssl 1.1.1 для python 2.7? - PullRequest
8 голосов
/ 13 февраля 2020

Я установил python 2.7.17 на машину windows 10. Затем я хотел протестировать его версию openssl, выполнив в python следующую команду:

import ssl
print ssl.OPENSSL_VERSION_INFO

Я получаю (1, 0, 2, 20, 15) Я хотел обновить версию 1.1.1. Выполняя замораживание pip, я получаю:

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

Похоже, что это последняя версия pip для pyOpenSSL и криптографии.

Установленный мной openssl (как часть git bash) это 1.1.1, однако, это не та же версия, которая используется внутри python.

Как обновить версию openssl, включенную в python, до 1.1.1 или выше?

РЕДАКТИРОВАТЬ: В ответ на комментарии, следующий результат 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']

Как указано выше, криптография и pyOpenSSL являются последними в pip .

1 Ответ

4 голосов
/ 20 февраля 2020

Единственный способ заставить Python 2.7 использовать текущую версию OpenSSL 1.1.1d для его модуля ssl - это перестроить его с этой версией OpenSSL. Для платформ * nix это не слишком сложно; это только включает в себя настройку некоторых исходных файлов конфигурации. Быстрый тест на macOS показал, что исходный код Python 2.7 на самом деле был совместим с API OpenSSL 1.1.1d, поэтому выглядел многообещающе. 1d сложнее. Это связано с тем, что система сборки, основанная на msbuild от Microsoft, не так легко настроить, как система сборки на основе make в * nix. Соответствующее решение Visual Studio, проекты и файлы свойств можно увидеть в подкаталоге Python * PCbuild .

Кроме того, различия между OpenSSL 1.0.2 и 1.1.1 версии немного больше в Windows, потому что имена библиотек также изменились, в то время как они остались прежними для * nix версии.

Необходимые модификации системы сборки Python для Windows не слишком обширны, хотя. Похоже, я смог добиться того, что вы ищете, после внесения изменений, описанных в нижней части этого ответа. Фактическая сборка может быть выполнена с помощью следующей команды, запущенной из подкаталога Python PCbuild:

> build --no-tkinter --no-bsddb -e "/p:PlatformToolset=v141"

для 32-разрядной сборки или

> build --no-tkinter --no-bsddb -e -p x64 "/p:PlatformToolset=v141"

для 64-битная сборка. Опции --no- используются для ускорения процесса и фокусирования на аспекте OpenSSL. v141 обозначает Visual Studio 2017, вам нужно быть в оболочке Visual Studio, чтобы это работало. После этого следующий тест воспроизвел ваш тест, демонстрирующий использование OpenSSL 1.1.1d с 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

Я не проводил никаких тестов, кроме этого.


В итоге, изменения для достижения этой цели включают

  • Удален проект libeay из решения. Это использовалось для сборки OpenSSL 1.0.2 из исходного кода, но оно не совместимо с OpenSSL 1.1.1. Вместо этого решение теперь использует предварительно собранные двоичные файлы OpenSSL 1.1.1d, как это предусмотрено в репозитории Python в cpython -bin-deps . Собственная сборка OpenSSL как часть процесса сборки возможна, но требует дополнительных изменений.
  • Изменен пакетный скрипт get_externals.bat для загрузки предварительно собранных библиотек OpenSSL 1.1.1d из вышеупомянутого c python -bin-deps репозиторий.
  • Изменен файл свойств openssl.props, который настраивает некоторые из _ssl и _hashlib Настройки проекта, а также внесли некоторые изменения в сами проекты. Корректировки в основном взяты из v3.8.1 версии Python, чтобы связать их с новыми библиотеками OpenSSL и правильно задать пути включения. С этой модификацией OpenSSL больше не статически связан, как это было в 2.7.17, а динамически связан.
  • Примененные патчи к файлам Modules/posixmodule.c и Modules/timemodule.c аналогично этому патчу , чтобы разрешить сборку с Visual Studio 2017 - в той же версии, с которой создаются предварительно собранные двоичные файлы OpenSSL.

Кстати, больше вещи, которые необходимы, загружаются в текущем процессе сборки, включая исходный код OpenSSL и nasm. Это только для того, чтобы как можно меньше модифицировать исходные сценарии сборки.

Если вас интересуют подробности, вы можете проверить соответствующий коммит в этой ветке cpython репо , что я сделал только для разъяснения своего ответа. Он основан на оригинальном теге v2.7.17. Вы сможете воспроизвести сборку, проверив эту ветку v2.7.17_ossl_1.1.1 и выполнив команду сборки в PCbuild, как указано выше. Если заинтересованным людям достаточно, я могу почистить их и держать их рядом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...