Wie kann ich Ansible (oder auch Python) zwingen, OpenSSL auf Sicherheitsebene 0 in Ubuntu 22.04 zu verwenden?

Wie kann ich Ansible (oder auch Python) zwingen, OpenSSL auf Sicherheitsebene 0 in Ubuntu 22.04 zu verwenden?

Ich habe Ansible auf einem Host mit Ubuntu 22.04 installiert, von dem aus ich versuche, mithilfe von winrm eine Verbindung zu einem Host mit Windows Server 2012 R2 herzustellen. Das Problem ist, dass ich einen Verbindungsfehler erhalte.

Nachdem ich mehrere Stunden lang dem Fehler nachgejagt hatte, fand ich die Ursache:

  • Verwenden vonSSL-Scan(mit der --show-sigsOption) Ich habe festgestellt, dass der Windows-Host nur den rsa_pkcs1-sha1Serversignaturalgorithmus akzeptiert (soweit ich das untersucht habe, wird dieser Algorithmus beim Schlüsselaustausch verwendet und hat nichts mit den Signaturalgorithmen zu tun, die mit dem Zertifikat in Zusammenhang stehen). Ich bin versucht zu sagen, dass dies das normale Verhalten von Windows Server 2012 R2 ist, aber ich bin kein Windows-Experte, um mir dessen sicher zu sein.
  • Ubuntu 22.04 wird mit OpenSSL 3.0.2 ausgeliefert, das standardmäßig auf Sicherheitsebene 2 konfiguriert ist. Soweit ich weiß, verwendet OpenSSL mit dieser Version und auf dieser Sicherheitsebene keinen Algorithmus, der SHA1 verwendet. Dies bedeutet, dass OpenSSL während des TLS-Handshakes mit dem Windows-Host den rsa_pkcs1-sha1Algorithmus niemals als unterstützten Algorithmus in der Liste „signature_algorithms“ des Client Hello anzeigt (ich habe dies mit Wireshark bestätigt).
  • Da der Windows Server 2012 R2-Host nur versteht rsa_pkcs1-sha1, es aber nicht im Client Hello angezeigt wird, kann der Host nur die Verbindung beenden und die folgende Meldung in der Ereignisanzeige hinterlassen:Von einer Remote-Client-Anwendung wurde eine TLS 1.2-Verbindungsanforderung empfangen, aber keine der von der Client-Anwendung unterstützten Verschlüsselungssammlungen wird vom Server unterstützt.. Beachten Sie, dass die Nachricht etwas irreführend ist, da es überhaupt kein Problem mit den Verschlüsselungssammlungen gibt. Das Problem liegt in den Signaturalgorithmen für den Schlüsselaustausch.

Mit diesen Informationen habe ich beschlossen, den Sicherheitslevel von OpenSSL von 2 auf 0 herunterzustufen. Sicherheitslevel 0 bedeutet, dass sich OpenSSL wie frühere Versionen von OpenSSL verhält (die insbesondere SHA1 zuließen). Mithilfe des Befehls und Wireshark konnte ich bestätigen, dass diese Änderung OpenSSL die Verbindung zum Windows-Host ermöglichte, da OpenSSL auf Sicherheitslevel 0 den Algorithmus tatsächlich in die Liste der Signaturalgorithmen des Client Hello openssl s_clientaufnimmt .rsa_pkcs1-sha1

Das Problem besteht nun darin, dass Ansible trotz /etc/ssl/openssl.cnfder Konfiguration auf Sicherheitsebene 0 immer noch keine Verbindung zum Windows-Host herstellen kann. Ich vermute, dass Ansible einen Python-Wrapper von OpenSSL verwendet, der die /etc/ssl/openssl.cnfKonfigurationsdatei vollständig umgeht. Die Frage ist also: Wie kann ich Ansible (oder Python) zwingen, OpenSSL auf Sicherheitsebene 0 zu verwenden?

verwandte Informationen