Cách duy nhất để có được Python 2.7 sử dụng phiên bản OpenSSL 1.1.1d hiện tại cho ssl
mô-đun của nó là xây dựng lại nó với phiên bản OpenSSL đó. Đối với các nền tảng * nix, điều này không quá khó; nó chỉ liên quan đến việc điều chỉnh một số tập tin cấu hình ban đầu. Một thử nghiệm nhanh trên macOS cho thấy mã nguồn Python 2.7 thực sự tương thích với API OpenSSL 1.1.1d để có vẻ đầy hứa hẹn.
Tuy nhiên, đối với Windows, việc xây dựng lại Python 2.7 bằng OpenSSL 1.1.1d khó hơn. Điều này là do hệ thống xây dựng, phụ thuộc vào Microsoft msbuild
, không dễ điều chỉnh như make
hệ thống xây dựng dựa trên * nix. Bạn có thể thấy các giải pháp, dự án và tệp thuộc tính củaPCbuild
Visual Studio trong thư mục con của Python .
Ngoài ra, sự khác biệt giữa các phiên bản OpenSSL 1.0.2 và 1.1.1 lớn hơn một chút trên Windows, vì tên thư viện cũng đã thay đổi, trong khi chúng vẫn giữ nguyên cho phiên bản * nix.
Các sửa đổi bắt buộc đối với hệ thống xây dựng của Python cho Windows không quá rộng rãi. Có vẻ như tôi đã có thể đạt được những gì bạn đang tìm kiếm, sau khi thực hiện thay đổi được giải thích ở dưới cùng của câu trả lời này. Việc xây dựng thực tế có thể được thực hiện bằng lệnh sau chạy từ PCbuild
thư mục con của Python :
> build --no-tkinter --no-bsddb -e "/p:PlatformToolset=v141"
để xây dựng 32 bit, hoặc
> build --no-tkinter --no-bsddb -e -p x64 "/p:PlatformToolset=v141"
để xây dựng 64 bit. Các --no-
tùy chọn được sử dụng để tăng tốc quá trình và tập trung vào khía cạnh OpenSSL. v141
là viết tắt của Visual Studio 2017, bạn cần phải ở trong vỏ Visual Studio để làm việc này. Sau đó, phần sau đây đã sao chép thử nghiệm của bạn cho thấy việc sử dụng OpenSSL 1.1.1d với 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
Tôi đã không làm bất kỳ thử nghiệm nào ngoài việc này.
Tóm lại, những thay đổi để đạt được điều này bao gồm
- Loại bỏ
libeay
dự án khỏi giải pháp. Điều này đã được sử dụng để xây dựng OpenSSL 1.0.2 từ nguồn nhưng nó không tương thích với OpenSSL 1.1.1. Thay vào đó, giải pháp bây giờ dựa vào các nhị phân OpenSSL 1.1.1d dựng sẵn như được cung cấp bởi repo Python trong cpython-bin-deps . Tự xây dựng lại OpenSSL như một phần của quy trình xây dựng là có thể nhưng đòi hỏi phải sửa đổi nhiều hơn.
- Đã sửa đổi
get_externals.bat
tập lệnh bó để tải xuống các thư viện dựng sẵn OpenSSL 1.1.1d từ kho lưu trữ cpython-bin-deps đã nói ở trên.
- Sửa đổi
openssl.props
tệp thuộc tính cấu hình một số cài đặt _ssl
và _hashlib
dự án, đồng thời thực hiện một số thay đổi đối với các dự án đó. Các điều chỉnh chủ yếu được lấy từ việc v3.8.1
phát hành Python, để liên kết với các thư viện OpenSSL mới và đặt các đường dẫn bao gồm chính xác. Với sửa đổi này, OpenSSL không còn được liên kết tĩnh như trước đây trong 2.7.17, mà được liên kết động.
- Áp dụng các bản vá cho các tệp
Modules/posixmodule.c
và Modules/timemodule.c
tương tự như bản vá này , để cho phép xây dựng với Visual Studio 2017 - phiên bản tương tự các nhị phân OpenSSL dựng sẵn được tạo ra.
Nhân tiện, nhiều thứ hơn mức cần thiết được tải xuống trong quá trình xây dựng hiện tại, bao gồm cả mã nguồn OpenSSL và mã nguồn. Điều này chỉ để cho phép càng ít sửa đổi các tập lệnh xây dựng ban đầu càng tốt.
Nếu bạn quan tâm đến các chi tiết, bạn có thể kiểm tra các cam kết liên quan trong ngã ba này của repo cpython mà tôi đã làm chỉ với mục đích làm rõ câu trả lời của tôi. Nó dựa trên thẻ gốc v2.7.17
. Bạn sẽ có thể sao chép bản dựng bằng cách kiểm tra nhánh đó v2.7.17_ossl_1.1.1
và chạy lệnh xây dựng PCbuild
như đã đề cập ở trên. Nếu đủ người quan tâm, tôi có thể dọn dẹp và giữ nó xung quanh.