Как заставить ansible (или python, если уж на то пошло) использовать openssl на уровне безопасности 0 в Ubuntu 22.04?

Как заставить ansible (или python, если уж на то пошло) использовать openssl на уровне безопасности 0 в Ubuntu 22.04?

У меня установлен ansible на хосте с Ubuntu 22.04, с которого я пытаюсь подключиться к хосту с Windows Server 2012 R2 с помощью winrm. Проблема в том, что я получаю ошибку подключения.

После нескольких часов поиска ошибки я нашел причину:

  • С использованиемsslscan--show-sigsопцией) Я обнаружил, что хост Windows принимает только rsa_pkcs1-sha1алгоритм подписи сервера (насколько я знаю, этот алгоритм используется во время обмена ключами и не имеет ничего общего с алгоритмами подписи, связанными с сертификатом). Мне хочется сказать, что это нормальное поведение Windows Server 2012 R2, но я не эксперт по Windows, чтобы быть в этом уверенным.
  • Ubuntu 22.04 поставляется с openssl 3.0.2, настроенным по умолчанию на уровне seclevel 2. Насколько я понимаю, openssl с этой версией и на этом уровне seclevel не использует ни один алгоритм, использующий SHA1. Это означает, что во время рукопожатия TLS с хостом Windows openssl никогда не представляет алгоритм rsa_pkcs1-sha1как поддерживаемый в списке signature_algorithms Client Hello (я подтвердил это с помощью Wireshark).
  • Поскольку хост Windows Server 2012 R2 понимает только rsa_pkcs1-sha1, но не отображается в Client Hello, то единственное, что может сделать хост, — это разорвать соединение, оставив в средстве просмотра событий следующее сообщение:От удаленного клиентского приложения получен запрос на соединение TLS 1.2, но ни один из поддерживаемых клиентским приложением наборов шифров не поддерживается сервером.. Обратите внимание, что сообщение вводит в заблуждение, поскольку никаких проблем с наборами шифров нет. Проблема заключается в алгоритмах подписи для обмена ключами.

Имея эту информацию под рукой, я решил понизить уровень безопасности openssl с 2 до 0. Уровень безопасности 0 означает, что openssl будет вести себя как предыдущие версии openssl (которые, в частности, допускали SHA1). Я смог подтвердить, используя команду openssl s_clientи Wireshark, что это изменение позволило openssl подключиться к хосту Windows, поскольку на уровне безопасности 0 openssl фактически включает алгоритм rsa_pkcs1-sha1в список signature_algorithms Client Hello.

Проблема в том, что даже /etc/ssl/openssl.cnfбудучи настроенным на seclevel 0, ansible все еще не может подключиться к хосту Windows. Я предполагаю, что ansible использует какую-то оболочку python openssl, которая /etc/ssl/openssl.cnfполностью обходит файл конфигурации. Поэтому вопрос в следующем: как заставить ansible (или python, если на то пошло) использовать openssl на seclevel 0?

Связанный контент