Ubuntu 22.04 で、ansible (または python) に seclevel 0 で openssl を強制的に使用させるにはどうすればよいですか?

Ubuntu 22.04 で、ansible (または python) に seclevel 0 で openssl を強制的に使用させるにはどうすればよいですか?

Ubuntu 22.04 のホストに ansible をインストールし、そこから winrm を使用して Windows Server 2012 R2 のホストに接続しようとしています。問題は、接続エラーが発生することです。

数時間エラーを追跡した後、原因がわかりました。

  • 使用sslスキャン(オプション付き--show-sigs) Windows ホストはrsa_pkcs1-sha1サーバー署名アルゴリズムのみを受け入れることがわかりました (調査した限りでは、このアルゴリズムはキー交換時に使用され、証明書に関連する署名アルゴリズムとは関係がないと理解しています)。これは Windows Server 2012 R2 の通常の動作であると言いたくなりますが、私は Windows の専門家ではないので、確信はありません。
  • Ubuntu 22.04 には、デフォルトでセキュリティレベル 2 に設定された openssl 3.0.2 が付属しています。私の理解では、そのバージョンとそのセキュリティレベルの openssl は、SHA1 を使用するアルゴリズムを使用しません。つまり、Windows ホストとの TLS ハンドシェイク中に、openssl はrsa_pkcs1-sha1Client Hello の signature_algorithms リストで、そのアルゴリズムをサポートされているアルゴリズムとして提示することはありません (これは Wireshark で確認しました)。
  • Windows Server 2012 R2 ホストは のみを理解しますrsa_pkcs1-sha1が、Client Hello には表示されないため、ホストが実行できる唯一の操作は接続を終了し、イベント ビューアーに次のメッセージを残すことです。リモート クライアント アプリケーションから TLS 1.2 接続要求を受信しましたが、クライアント アプリケーションでサポートされている暗号スイートはいずれもサーバーでサポートされていません。暗号スイートにはまったく問題がないため、このメッセージは誤解を招く恐れがあることに注意してください。問題は、鍵交換の署名アルゴリズムにあります。

この情報を参考にして、openssl の seclevel を 2 から 0 にダウングレードすることにしました。seclevel 0 は、openssl が以前のバージョンの openssl (特に SHA1 を許可) のように動作することを意味します。openssl s_clientコマンドと Wireshark を使用して、この変更により openssl が Windows ホストに接続できることを確認できました。seclevel 0 では、openssl は実際にrsa_pkcs1-sha1Client Hello の signature_algorithms リストにアルゴリズムを含めます。

問題は、seclevel 0 に設定されていても/etc/ssl/openssl.cnf、ansible が Windows ホストに接続できないことです。私の推測では、ansible は/etc/ssl/openssl.cnf設定ファイルを完全にバイパスする openssl の python ラッパーを使用しているようです。そこで質問です。ansible (または python) に seclevel 0 で openssl を使用させるにはどうしたらよいのでしょうか?

関連情報