Die einzige Möglichkeit, Python 2.7 dazu zu bringen, die aktuelle OpenSSL 1.1.1d-Version für sein ssl
Modul zu verwenden, besteht darin, sie mit dieser OpenSSL-Version neu zu erstellen. Für * nix-Plattformen ist dies nicht zu schwierig. Es werden nur einige anfängliche Konfigurationsdateien angepasst. Ein schneller Test unter macOS zeigte, dass der Python 2.7-Quellcode tatsächlich mit der OpenSSL 1.1.1d-API kompatibel war, sodass dies vielversprechend aussah.
Unter Windows ist es jedoch schwieriger, Python 2.7 mit OpenSSL 1.1.1d neu zu erstellen. Dies liegt daran, dass das Build-System, das auf dem von Microsoft basiert msbuild
, nicht so einfach anzupassen ist wie das make
auf * nix basierende Build-System. Sie können die zugehörige Visual Studio-Lösung, Projekte und Eigenschaftendateien im Python- PCbuild
Unterverzeichnis anzeigen .
Darüber hinaus sind die Unterschiede zwischen den Versionen OpenSSL 1.0.2 und 1.1.1 unter Windows etwas größer, da sich auch die Bibliotheksnamen geändert haben, während sie für die * nix-Version gleich geblieben sind.
Die erforderlichen Änderungen am Build-System von Python für Windows sind jedoch nicht zu umfangreich. Es sieht so aus, als ob ich das erreichen konnte, wonach Sie suchen, nachdem ich die am Ende dieser Antwort erläuterte Änderung vorgenommen habe. Der eigentliche Build kann mit dem folgenden Befehl ausgeführt werden, der aus dem PCbuild
Unterverzeichnis von Python ausgeführt wird :
> build --no-tkinter --no-bsddb -e "/p:PlatformToolset=v141"
für einen 32-Bit-Build oder
> build --no-tkinter --no-bsddb -e -p x64 "/p:PlatformToolset=v141"
für einen 64-Bit-Build. Die --no-
Optionen werden verwendet, um den Prozess zu beschleunigen und sich auf den OpenSSL-Aspekt zu konzentrieren. v141
steht für Visual Studio 2017, Sie müssen sich in einer Visual Studio-Shell befinden, damit dies funktioniert. Danach wurde im Folgenden Ihr Test reproduziert, der die Verwendung von OpenSSL 1.1.1d mit Python 2.7.17 zeigt:
> 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
Darüber hinaus habe ich keine Tests durchgeführt.
Zusammenfassend umfassen die Änderungen, um dies zu erreichen
- Das
libeay
Projekt wurde aus der Lösung entfernt. Dies wurde verwendet, um OpenSSL 1.0.2 aus dem Quellcode zu erstellen, ist jedoch nicht mit OpenSSL 1.1.1 kompatibel. Stattdessen basiert die Lösung jetzt auf den vorgefertigten OpenSSL 1.1.1d-Binärdateien, die vom Python-Repo in cpython-bin-deps bereitgestellt werden . Das Neuerstellen von OpenSSL im Rahmen des Erstellungsprozesses ist möglich, erfordert jedoch weitere Änderungen.
- Das
get_externals.bat
Batch-Skript wurde geändert , um die vorgefertigten OpenSSL 1.1.1d-Bibliotheken aus dem oben genannten cpython-bin-deps-Repository herunterzuladen.
- Die
openssl.props
Eigenschaftendatei, in der mehrere Einstellungen _ssl
und _hashlib
Projekte konfiguriert sind, wurde geändert, und auch an diesen Projekten wurden einige Änderungen vorgenommen. Die Anpassungen stammen hauptsächlich aus der v3.8.1
Veröffentlichung von Python, um eine Verknüpfung mit den neuen OpenSSL-Bibliotheken herzustellen und die Include-Pfade korrekt festzulegen. Mit dieser Änderung ist OpenSSL nicht mehr wie in 2.7.17 statisch verknüpft, sondern dynamisch verknüpft.
- Anwenden von Patches auf die Dateien
Modules/posixmodule.c
und Modules/timemodule.c
ähnlich diesem Patch , um das Erstellen mit Visual Studio 2017 zu ermöglichen - dieselbe Version, mit der die vorgefertigten OpenSSL-Binärdateien erstellt wurden.
Übrigens wird im aktuellen Erstellungsprozess mehr Material als nötig heruntergeladen, einschließlich OpenSSL und Nasm-Quellcode. Dies dient nur dazu, möglichst wenige Änderungen an den ursprünglichen Build-Skripten zuzulassen.
Wenn Sie an den Details interessiert sind, können Sie das zugehörige Commit in dieser Abzweigung des Cpython-Repos überprüfen, das ich nur zum Zwecke der Klärung meiner Antwort ausgeführt habe. Es basiert auf dem Original-Tag v2.7.17
. Sie sollten in der Lage sein, den Build zu reproduzieren, indem Sie diesen Zweig auschecken v2.7.17_ossl_1.1.1
und den Build-Befehl PCbuild
wie oben erwähnt ausführen . Wenn genug Leute interessiert sind, kann ich es aufräumen und behalten.