Como posso forçar o ansible (ou python) a usar o openssl no seclevel 0 no Ubuntu 22.04?

Como posso forçar o ansible (ou python) a usar o openssl no seclevel 0 no Ubuntu 22.04?

Instalei o ansible em um host com Ubuntu 22.04, a partir do qual tento me conectar a um host com Windows Server 2012 R2 usando winrm. O problema é que recebo um erro de conexão.

Depois de perseguir o erro por várias horas, descobri o motivo:

  • Usandosslscan(com a --show-sigsopção) descobri que o host do Windows aceita apenas o rsa_pkcs1-sha1algoritmo de assinatura do servidor (até onde investiguei, entendo que esse algoritmo é usado durante a troca de chaves e não tem nada a ver com os algoritmos de assinatura relacionados ao certificado). Estou tentado a dizer que esse é o comportamento normal do Windows Server 2012 R2, mas não sou um especialista em Windows para ter certeza disso.
  • O Ubuntu 22.04 vem com o openssl 3.0.2 configurado por padrão no seclevel 2. Pelo que entendi, o openssl com essa versão e nesse seclevel não faz uso de nenhum algoritmo que use SHA1. Isso significa que, durante o handshake TLS com o host do Windows, o openssl nunca apresenta o rsa_pkcs1-sha1algoritmo como um algoritmo suportado na lista subscription_algorithms do Client Hello (confirmei isso com o Wireshark).
  • Como o host do Windows Server 2012 R2 só entende rsa_pkcs1-sha1, mas não é apresentado no Client Hello então a única coisa que o host pode fazer é encerrar a conexão, deixando a seguinte mensagem no Visualizador de Eventos:Uma solicitação de conexão TLS 1.2 foi recebida de um aplicativo cliente remoto, mas nenhum dos conjuntos de criptografia suportados pelo aplicativo cliente é compatível com o servidor. Observe que a mensagem é meio enganosa porque não há nenhum problema com os conjuntos de criptografia. O problema está nos algoritmos de assinatura para a troca de chaves.

Com essas informações em mãos, decidi fazer o downgrade do seclevel do openssl de 2 para 0. Seclevel 0 significa que o openssl se comportará como as versões anteriores do openssl (que em particular permitiam SHA1). Consegui confirmar, usando o openssl s_clientcomando e o Wireshark, que essa alteração permitiu que o openssl se conectasse ao host do Windows porque, no seclevel 0, o openssl de fato inclui o rsa_pkcs1-sha1algoritmo na lista de subscription_algorithms do Client Hello.

O problema agora é que, mesmo /etc/ssl/openssl.cnfconfigurado no seclevel 0, o ansible ainda não é capaz de se conectar ao host do Windows. Meu palpite é que o ansible faz uso de algum wrapper python do openssl que ignora /etc/ssl/openssl.cnfcompletamente o arquivo de configuração. Portanto, a questão é: como posso forçar o ansible (ou python) a usar o openssl no seclevel 0?

informação relacionada