sysmerge IT

4 нояб. 2019 г.

Centos 6.9: Can't connect to HTTPS URL because the SSL module is not available

При попытке обновить Pip командой
pip3 install --upgrade pip
выбивает ошибку

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)': /simple/pip/
Причина, собственно, довольно четко описана в этом сообщении. Нужно обновить openssl и пересобрать Python, указав ему при сборке пути к новому openssl.

Качаем openssl:
# wget https://www.openssl.org/source/openssl-1.1.1-pre8.tar.gz
Распаковываем:
#  tar -xzf openssl-1.1.1-pre8.tar.gz
 Далее стандартная процедура конфигурации и компиляции:
# cd openssl-1.1.1-pre8
# ./config
# make
# make install
Проверить версию собранного нами Openssl нужно командой
# /usr/local/bin/openssl version
Но в итоге мы, если все сделали верно, получим ошибку "/usr/local/bin/openssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory". Так и должно быть, нам нужно подбросить файлы таким образом:
# ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/
# ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/
# mv /usr/bin/openssl /usr/bin/openssl_old
# ln -s /usr/local/bin/openssl /usr/bin/openssl
Теперь системный openssl будет свежей версии.
Далее, для сборки питона нужно будет исправить одну строку, чтобы при компилировании были задействованы инклюды из /usr/local/ (куда был скомпилирован свежий openssl )

Править необходимо файл Modules/Setup. Приводим его к тому виду:

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/
_ssl _ssl.c \
           -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

И компилируем питон.