Hii
I tried to replicate what you see. To help debug I spun up an old web
server that is only doing TLSv1.
Then, on a clean Debian 12 VM, initially the URL fails to fetch with curl,
as expected:

(venv) vagrant@debian-12:~$ curl -Ikv https://tlsv1.tienhuis.nl
*   Trying [2001:648:2ffc:1225:a800:4ff:fec1:7353]:443...
* Connected to tlsv1.tienhuis.nl (2001:648:2ffc:1225:a800:4ff:fec1:7353)
port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.0 (IN), TLS handshake, Certificate (11):
* TLSv1.0 (IN), TLS handshake, Server key exchange (12):
* TLSv1.0 (OUT), TLS alert, internal error (592):
* OpenSSL/3.0.13: error:0A00014D:SSL routines::legacy sigalg disallowed or
unsupported
* Closing connection 0
curl: (35) OpenSSL/3.0.13: error:0A00014D:SSL routines::legacy sigalg
disallowed or unsupported

Likewise, this playbook:

---
- name: legacy test
  hosts: localhost
  gather_facts: false
  connection: local
  tasks:
    - name: fetch URL
      ansible.builtin.uri:
        url: https://tlsv1.tienhuis.nl
        validate_certs: false
      register: out
    - ansible.builtin.debug: var=out

also fails at the uri task:

TASK [fetch URL]
*********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "elapsed": 0, "msg":
"Status code was -1 and not [200]: Request failed: <urlopen error [SSL]
legacy sigalg disallowed or unsupported (_ssl.c:992)>", "redirected":
false, "status": -1, "url": "https://tlsv1.tienhuis.nl"}

Replacing /etc/ssl/openssl.cnf with the small version that you have

(venv) vagrant@debian-12:~$ cat /etc/ssl/openssl.cnf
openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=0
Options = UnsafeLegacyRenegotiation

makes curl work:

(venv) vagrant@debian-12:~$ curl -Ikv https://tlsv1.tienhuis.nl
*   Trying [2001:648:2ffc:1225:a800:4ff:fec1:7353]:443...
* Connected to tlsv1.tienhuis.nl (2001:648:2ffc:1225:a800:4ff:fec1:7353)
port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.0 (IN), TLS handshake, Certificate (11):
* TLSv1.0 (IN), TLS handshake, Server key exchange (12):
* TLSv1.0 (IN), TLS handshake, Server finished (14):
* TLSv1.0 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.0 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.0 (OUT), TLS handshake, Finished (20):
* TLSv1.0 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1 / ECDHE-RSA-AES256-SHA
* ALPN: server did not agree on a protocol. Uses default.
* Server certificate:
*  subject: CN=tlsv1.tienhuis.nl
*  start date: Aug 17 10:25:11 2024 GMT
*  expire date: Jan 17 10:25:11 2038 GMT
*  issuer: CN=tlsv1.tienhuis.nl
*  SSL certificate verify result: self-signed certificate (18), continuing
anyway.
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: tlsv1.tienhuis.nl
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK

BUT, it also makes the uri task in the ansible playbook work:

TASK [ansible.builtin.debug]
*********************************************************************************************************
ok: [localhost] => {
    "out": {
        "accept_ranges": "bytes",
        "changed": false,
        "connection": "close",
        "content_length": "10701",
        "content_type": "text/html",
        "cookies": {},
        "cookies_string": "",
        "date": "Sat, 17 Aug 2024 11:02:40 GMT",
        "elapsed": 0,
        "etag": "\"29cd-61fde5e24e55f\"",
        "failed": false,
        "last_modified": "Sat, 17 Aug 2024 10:16:22 GMT",
        "msg": "OK (10701 bytes)",
        "redirected": false,
        "server": "Apache/2.4.10 (Debian)",
        "status": 200,
        "url": "https://tlsv1.tienhuis.nl";,
        "vary": "Accept-Encoding"
    }
}

This seems to indicate a local problem somewhere on your side....
FYI, on my control node:

(venv) vagrant@debian-12:~$ ansible --version
ansible [core 2.17.3]
  config file = None
  configured module search path =
['/home/vagrant/.ansible/plugins/modules',
'/usr/share/ansible/plugins/modules']
  ansible python module location =
/home/vagrant/venv/lib/python3.11/site-packages/ansible
  ansible collection location =
/home/vagrant/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/vagrant/venv/bin/ansible
  python version = 3.11.2 (main, May  2 2024, 11:59:08) [GCC 12.2.0]
(/home/vagrant/venv/bin/python3)
  jinja version = 3.1.4
  libyaml = True
(venv) vagrant@debian-12:~$ pip list
Package      Version
------------ -------
ansible-core 2.17.3
cffi         1.17.0
cryptography 43.0.0
Jinja2       3.1.4
MarkupSafe   2.1.5
packaging    24.1
pip          24.2
pycparser    2.22
PyYAML       6.0.2
resolvelib   1.0.1
setuptools   66.1.1
wheel        0.44.0
(venv) vagrant@debian-12:~$ openssl version
OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
(venv) vagrant@debian-12:~$ uname -a
Linux debian-12 6.1.0-23-arm64 #1 SMP Debian 6.1.99-1 (2024-07-15) aarch64
GNU/Linux


On Sat, 17 Aug 2024 at 00:33, Garri Djavadyan <[email protected]> wrote:

> Hi Dick, Walter, and all,
>
> Dick, I totally agree that patching Ansible to support insecure
> protocols should be discouraged in general, and I am totally fine to
> continue using my current curl-based playbook until the legacy devices
> are decommissioned. I was just curious if it would be possible to use
> 'ansible.builtin.uri' in an unsafe OpenSSL context without touching the
> Ansible code.
>
> Walter, as far as I know, Linux kernel's TLS sockets (ktls) [1] only
> provide encryption offloading capabilities to the user space libraries,
> such as OpenSSL. As far as I can see, the handshake still should be
> handled by the user space library.
>
> As far as I know, 'ansible.builtin.uri' depends on the Python standard
> library's 'urllib' [2], which depends on the 'ssl' module [3], also
> from the standard library. The latter, depends on the user space
> OpenSSL library.
>
> Also, as I mentioned before, I can successfully talk to my legacy
> devices using "curl" and loosened OpenSSL configuration, that I shared
> earlier, from the same Debian 12.6 system. Therefore, I do not think
> the kernel prohibits 'uri' from negotiating TLS 1.0 connections.
>
> Thank you.
>
> Regards,
> Garri
>
>
> [1] https://www.kernel.org/doc/html/latest/networking/tls.html
> [2]
>
> https://github.com/ansible/ansible/blob/v2.17.3/lib/ansible/module_utils/urls.py#L54
> [3] https://docs.python.org/3/library/ssl.html
>
>
> On Fri, 2024-08-16 at 11:13 +0000, 'Rowe, Walter P. (Fed)' via Ansible
> Project wrote:
> > If the kernel / OS won't allow lowering the TLS then a custom
> > openssl.conf likely won't either. You can't override the kernel / OS
> > to lower security.
> >
> > Walter
> > --
> > Walter Rowe, Division Chief
> > Infrastructure Services Division
> > Mobile: 202.355.4123
> >
> > > On Aug 16, 2024, at 5:23 AM, Dick Visser <[email protected]>
> > > wrote:
> > >
> > >
> > >
> > >
> > >
> > > Hii
> > >
> > > Hacking ansible to make it work with its native uri module may
> > > work, but it will likely make the hack go under the radar.
> > >
> > >
> > > Since it is already a security lowering snowflake, IMHO it is good
> > > to make this explicit by having it done in a custom shell/command.
> > > It is simple, easy, and makes it very clear what is going on for
> > > this specific device.
> > >
> > >
> > >
> > >
> > > On Thu, 15 Aug 2024 at 23:31, Garri Djavadyan
> > > <[email protected]> wrote:
> > > > Hi Walter,
> > > >
> > > > > Your system may not allow older TLS connections.
> > > >
> > > > Exactly, and this is why I currently have to use a custom
> > > > weakened openssl.cnf by the curl-based Ansible playbook. However,
> > > > the environment variable OPENSSL_CONF, referring to the custom
> > > > OpenSSL config, is ignored when I use "ansible.builtin.uri".
> > > > Actually, "ansible.builtin.uri" even ignores by OpenSSL config
> > > > located in the default path /etc/ssl/openssl.cnf on my Debian
> > > > 12.6 system:
> > > >
> > > > -----BEGIN SHELL-----
> > > > $ cat /etc/ssl/openssl.cnf
> > > > openssl_conf = openssl_init
> > > >
> > > > [openssl_init]
> > > > ssl_conf = ssl_sect
> > > >
> > > > [ssl_sect]
> > > > system_default = system_default_sect
> > > >
> > > > [system_default_sect]
> > > > MinProtocol = TLSv1
> > > > CipherString = DEFAULT@SECLEVEL=0
> > > > Options = UnsafeLegacyRenegotiation
> > > >
> > > >
> > > > $ ansible-playbook -vvv test.yml
> > > > ...
> > > > "msg": "Status code was -1 and not [200]: Request failed:
> > > > <urlopen error [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert
> > > > handshake failure (_ssl.c:1000)>",
> > > > ...
> > > > -----END SHELL-----
> > > >
> > > >
> > > > Thank you.
> > > >
> > > > Regards,
> > > > Garri
> > > >
> > > >
> > > >
> > > > On Thursday, August 15, 2024 at 1:15:22 PM UTC+2 Rowe, Walter P.
> > > > (Fed) wrote:
> > > > > Check your system settings. Your system may not allow older TLS
> > > > > connections. TLS 1.0 is compromised and therefore no longer
> > > > > allowed by many systems.
> > > > >
> > > > > What platform is your control host?
> > > > >
> > > > > Walter
> > > > > --
> > > > > Walter Rowe, Division Chief
> > > > > Infrastructure Services Division
> > > > > Mobile: 202.355.4123
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > On Aug 15, 2024, at 5:00 AM, Garri Djavadyan
> > > > > > <[email protected]> wrote:
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > Hi Steve,
> > > > > >
> > > > > > > Did you try with SECLEVEL=0 ?
> > > > > >
> > > > > > Yes, I did. However, the result is the same: Ansible
> > > > > > controller is not happy with the bare TLS 1.0 reply from the
> > > > > > legacy box:
> > > > > >
> > > > > > "msg": "Status code was -1 and not [200]: Request failed:
> > > > > > <urlopen error [SSL: UNSUPPORTED_PROTOCOL] unsupported
> > > > > > protocol (_ssl.c:1000)>"
> > > > > >
> > > > > >
> > > > > > - name: Query legacy boxes
> > > > > >   hosts: legacyboxes
> > > > > >   gather_facts: false
> > > > > >   connection: local
> > > > > >   tasks:
> > > > > >     - name: GET the home page
> > > > > >       ansible.builtin.uri:
> > > > > >         url: https://{{ ansible_host }}
> > > > > >         ciphers:
> > > > > >           - 'DEFAULT@SECLEVEL=0'
> > > > > >
> > > > > >
> > > > > > Again, ciphers-wise, the setup is fine, but I do not think it
> > > > > > is possible to enforce the minimum TLS protocol version with
> > > > > > the cipher string.
> > > > > >
> > > > > > Thank you.
> > > > > >
> > > > > > Regards,
> > > > > > Garri
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > --
> > > > > > You received this message because you are subscribed to the
> > > > > > Google Groups "Ansible Project" group.
> > > > > > To unsubscribe from this group and stop receiving emails from
> > > > > > it, send an email [email protected].
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > To view this discussion on the web visit
> > > > > >
> https://groups.google.com/d/msgid/ansible-project/85e58522-271e-45aa-832a-8a2a7c6b5a38n%40googlegroups.com
> > > > > > .
> > > > >
> > > > >
> > > >
> > > > --
> > > > You received this message because you are subscribed to the
> > > > Google Groups "Ansible Project" group.
> > > > To unsubscribe from this group and stop receiving emails from it,
> > > > send an email [email protected].
> > > > To view this discussion on the web visit
> > > >
> https://groups.google.com/d/msgid/ansible-project/fe2f9e80-a54e-4ffc-87f1-bdfe8788c858n%40googlegroups.com
> > > > .
> > > >
> > >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/9cda0f58e659cd8470945e833926da98af841cb1.camel%40gmail.com
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAF8BbLbsC4fDWTWQYXaURRRRWLksRgg91F9gO6PZpnsAOjMLAg%40mail.gmail.com.

Reply via email to