Mercurial Hg Python библиотека openssl не сможет подключиться к стандартной SSL настройке Apache v2.

Вопрос или проблема

Я пытаюсь выполнить hg pull --insecure на ноутбуке с Mac OS X против hgweb Mercurial, работающего на веб-сервере Apache v2.

Я получаю ошибку на командной строке:

abort: could not set ciphers: No cipher can be selected.
(change cipher string (DEFAULT:@SECLEVEL=0) in config)

Моя версия Mercurial (hg): 6.8.1, собранная из *.tar.gz “тарбола” с сайта SCM. Папка репозитория, в которую я тяну, скопирована в точности с машины win32, работающей под управлением TortoiseHg. Версия Python: Python 3.9.6.

Моя версия Apache: Server version: Apache/2.4.62 (Debian). Соединение происходит через SSL. Я полагаю, что поддержка TLS в моей конфигурации Apache “почти по умолчанию” с самоподписанным сертификатом.

Когда я подключаюсь к Apache через FireFox, FireFox сообщает о поддержке TLS 1.3 в настройках безопасности. Однако я знаю, что OpenSSL Python, который используется в моих скриптах Mercurial, настроен только на поддержку TLS 1.2. (Я вижу это в файле sslutil.py в архиве mercurial-6.8.1.tar.gz)

Я могу успешно выполнять команды Mercurial hg с помощью TortoiseHg на нескольких машинах MS Windows против того же веб-сервера hgweb.

Как я могу это исправить? Почему python не может провести сессию TLS 1.2 с моим веб-сервером Apache?

Ответ или решение

Проблема, с которой вы столкнулись, связана с несовместимостью между настройками шифрования в вашем клиенте Mercurial и сервере Apache. Давайте разберем все возможные аспекты, касающиеся этой ситуации, и предложим решение.

1. Понимание ошибки

Ошибка, которую вы видите:

abort: could not set ciphers: No cipher can be selected.
(change cipher string (DEFAULT:@SECLEVEL=0) in config)

указывает на то, что выбранное шифрование (cipher) не поддерживается текущими настройками OpenSSL в вашей версии Python, используемой Mercurial. Возможно, версии шифров, поддерживаемые вашим Python и OpenSSL, не соответствуют тем, которые предлагает сервер Apache.

2. Совместимость версий

На вашей машине установлены следующие версии:

  • Mercurial: 6.8.1 (собранный из исходников)
  • Python: 3.9.6
  • Apache: 2.4.62 (Debian)

Согласно вашему описанию, Apache поддерживает TLS 1.3, что является наиболее современным протоколом. Python 3.9.6, вероятнее всего, поддерживает TLS 1.2, но использование OpenSSL, установленного на вашей системе, также может ограничивать версию протокола.

3. Проверка конфигураций

a. Конфигурация Apache

Убедитесь, что в файле конфигурации вашего Apache (обычно это /etc/apache2/sites-available/default-ssl.conf или подобный) указаны корректные настройки для используемого протокола и шифрования. Например:

SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5

Таким образом, вы исключите протоколы, которые могут быть небезопасными, и позаботитесь о наиболее надежных шифрах.

b. Проверка OpenSSL

Убедитесь, что версия OpenSSL, используемая вашим Python, поддерживает необходимые шифры и протоколы. Запустите следующую команду для проверки доступных шифров:

openssl ciphers -v

Это позволит вам увидеть, какие именно шифры доступны на вашей машине.

4. Настройка Mercurial

Вы можете добавить в конфигурацию Mercurial в .hgrc (файл конфигурации Mercurial):

[web]
cacerts = /path/to/your/cacert.pem
ciphers = DEFAULT:@SECLEVEL=0

Эта инструкция изменит настройки шифрования, позволяя более гибко настраивать соединение.

5. Попробуйте использовать --insecure

Вы уже пробовали команду с параметром --insecure. Этот параметр отключает проверку сертификата, и это может временно помочь вам установить соединение, однако не рекомендуется в продакшен-среде.

6. Обновление и репарация зависимостей

Если всё вышеуказанное не помогает, возможно, имеет смысл обновить OpenSSL и Python, чтобы исключить устаревшие и несовместимые библиотеки. Убедитесь, что используете последние стабильные версии, совместимые с вашими проектами.

Заключение

Ваша проблема связана с несовместимостью настроек шифрования между Mercurial и Apache. Проведите вышеупомянутые проверки и настройки, чтобы устранить проблему. Если проблема сохраняется, возможно, стоит рассмотреть обращение к сообществу Mercurial или этому проекту с конкретными логами и версиями используемого программного обеспечения.

Надеюсь, это поможет вам решить вашу проблему и наладить успешное соединение между Mercurial и вашим сервером Apache.

Оцените материал
Добавить комментарий

Капча загружается...