Я запускаю Python 3.5.6 в дистрибутиве, где версии TLS ниже 1.2 были скомпилированы из OpenSSL, передав эти параметры в ./configure: no-ssl no-tls1 no-tls1_1 no-ssl3-method no-tls1-method no-tls1_1-method
. Версия OpenSSL - 1.1.1d. Python 3 собран из исходного кода во время сборки дистрибутива и связан с версией OpenSSL, включенной в дистрибутив.
Все собирается успешно, но когда я пытаюсь импортировать библиотеку ssl
в Python, Я получаю следующую ошибку:
$ python3
Python 3.5.6 (default, Mar 23 2020, 05:11:33)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/ssl.py", line 99, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: /usr/lib/python3.5/lib-dynload/_ssl.cpython-35m-aarch64-linux-gnu.so: undefined symbol: TLSv1_method
Я не понимаю, почему эта ошибка возникает во время выполнения. Единственная ссылка, которую я могу найти в коде Python 3.5.6 на TLSv1_method, - это строка 3088 _ssl. c:
ctx = SSL_CTX_new(TLSv1_method());
Использование no-tls1-method
компилирует реализацию TLSv1_method
, и эта строка в коде Python не защищена никакими #ifdef
. Но я ожидаю, что это вызовет сбой во время соединения для модуля _ssl.cpython-35m-aarch64-linux-gnu.so
, а не во время выполнения, когда Python попытается импортировать модуль. Что здесь происходит, и есть ли способ исправить это без исправлений Python? Я не могу обновить используемую версию OpenSSL или Python.