Ubuntu 22.04의 seclevel 0에서 openssl을 사용하도록 ansible(또는 해당 문제에 대한 Python)을 강제로 적용하려면 어떻게 해야 합니까?

Ubuntu 22.04의 seclevel 0에서 openssl을 사용하도록 ansible(또는 해당 문제에 대한 Python)을 강제로 적용하려면 어떻게 해야 합니까?

Ubuntu 22.04가 설치된 호스트에 ansible을 설치했으며, 여기에서 winrm을 사용하여 Windows Server 2012 R2가 있는 호스트에 연결하려고 합니다. 문제는 연결 오류가 발생한다는 것입니다.

몇 시간 동안 오류를 추적한 결과 다음과 같은 이유를 발견했습니다.

  • 사용SSL스캔( --show-sigs옵션 포함) Windows 호스트는 rsa_pkcs1-sha1서버 서명 알고리즘만 허용한다는 사실을 발견했습니다(조사한 바에 따르면 이 알고리즘은 키 교환 중에 사용되며 인증서와 관련된 서명 알고리즘과는 아무런 관련이 없다는 것을 알고 있습니다). 이것이 Windows Server 2012 R2의 정상적인 동작이라고 말하고 싶지만 이에 대해 확신할 수 있는 Windows 전문가는 아닙니다.
  • Ubuntu 22.04에는 기본적으로 seclevel 2로 구성된 openssl 3.0.2가 함께 제공됩니다. 내가 이해하는 한 해당 버전과 해당 seclevel의 openssl은 SHA1을 사용하는 알고리즘을 사용하지 않습니다. 이는 Windows 호스트와의 TLS 핸드셰이크 중에 openssl이 rsa_pkcs1-sha1해당 알고리즘을 Client Hello의 서명_알고리즘 목록에 지원되는 알고리즘으로 표시하지 않는다는 것을 의미합니다(Wireshark를 통해 이를 확인했습니다).
  • Windows Server 2012 R2 호스트는 이해만 rsa_pkcs1-sha1하지만 Client Hello에 표시되지 않으므로 호스트가 할 수 있는 유일한 작업은 연결을 종료하고 이벤트 뷰어에 다음 메시지를 남기는 것입니다.원격 클라이언트 애플리케이션에서 TLS 1.2 연결 요청을 받았지만 클라이언트 애플리케이션에서 지원하는 암호화 제품군 중 어느 것도 서버에서 지원되지 않습니다.. 암호 제품군에는 전혀 문제가 없기 때문에 메시지가 오해의 소지가 있다는 점에 유의하세요. 문제는 키 교환을 위한 서명 알고리즘에 있습니다.

이 정보를 바탕으로 나는 openssl의 seclevel을 2에서 0으로 다운그레이드하기로 결정했습니다. Seclevel 0은 openssl이 이전 버전의 openssl(특히 SHA1을 허용함)처럼 작동한다는 것을 의미합니다. 명령과 Wireshark를 사용하여 이 변경으로 openssl이 Windows 호스트에 연결할 수 있음을 확인할 수 있었습니다. openssl s_client왜냐하면 seclevel 0에서 openssl은 실제로 rsa_pkcs1-sha1Client Hello의 서명_알고리즘 목록에 알고리즘을 포함하기 때문입니다.

이제 문제는 /etc/ssl/openssl.cnfseclevel 0으로 구성되었음에도 불구하고 ansible이 여전히 Windows 호스트에 연결할 수 없다는 것입니다. 내 생각엔 ansible이 구성 파일을 완전히 우회하는 openssl의 일부 Python 래퍼를 사용하는 것 같습니다 /etc/ssl/openssl.cnf. 그래서 질문은: 어떻게 ansible(또는 해당 문제에 대한 Python)이 seclevel 0에서 openssl을 사용하도록 강제할 수 있습니까?

관련 정보