Ich habe Python 2.7.17 auf einem Windows 10-Computer installiert. Ich wollte dann seine openssl-Version testen, indem ich in Python Folgendes ausführte:
import ssl
print ssl.OPENSSL_VERSION_INFO
Ich bekomme ein (1, 0, 2, 20, 15)
Upgrade auf Version 1.1.1. Beim Pip Freeze bekomme ich:
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
Dies scheint die neueste Version von pyOpenSSL und Kryptografie zu sein.
Das von mir installierte openssl (als Teil von git bash) ist 1.1.1, dies ist jedoch nicht dieselbe Version, die in Python verwendet wird.
Wie aktualisiere ich die in Python enthaltene Version von openssl auf 1.1.1 oder höher?
BEARBEITEN: Als Antwort auf die Kommentare ist das Folgende ein Ergebnis von 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']
Wie oben erwähnt, sind Kryptografie und pyOpenSSL die neuesten Pip-Versionen.
python
python-2.7
openssl
windows-10
pyopenssl
Assaf Mendelson
quelle
quelle
py -m OpenSSL.debug
? Haben Sie versucht, jedes der aufgelisteten Module zu aktualisieren?Antworten:
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 dasmake
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 :für einen 32-Bit-Build oder
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:Darüber hinaus habe ich keine Tests durchgeführt.
Zusammenfassend umfassen die Änderungen, um dies zu erreichen
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.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.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 derv3.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.Modules/posixmodule.c
undModules/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 auscheckenv2.7.17_ossl_1.1.1
und den Build-BefehlPCbuild
wie oben erwähnt ausführen . Wenn genug Leute interessiert sind, kann ich es aufräumen und behalten.quelle