Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SoapClient -> ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small #94

Closed
intersoftsistemas opened this issue Jul 9, 2022 · 3 comments

Comments

@intersoftsistemas
Copy link

Buenos Días, describo un error, trabajando en Windows 10, Python 3.10.5, en Homologación, funciona perfecto, pero cambiando a producción, ocurre lo siguiente:

en la llamada a Conectar, archivo: rece1.py
`

    ws = wsfev1.WSFEv1() 
    ws.Conectar(
        "",
        wsfev1_url,
        proxy=proxy_dict,
        cacert=CACERT,
        wrapper=WRAPPER,
        timeout=TIMEOUT,
    )

`

...cuando intenta crear SoapClient, en utils.py:

`

        self.client = SoapClient( 
            wsdl=wsdl,
            cache=cache,
            proxy=proxy_dict,
            cacert=cacert,
            timeout=timeout,
            ns=ns,
            soap_server=soap_server,
            trace="--trace" in sys.argv,
        )

`
...se genera lo siguiente:

Traceback (most recent call last):
File "rece1.py", line xxxx, in main
ws.Conectar(
File "...\utils.py", line xxxx, in Conectar
self.client = SoapClient(
File "D:\apps\Python310\lib\site-packages\pysimplesoap\client.py", line 151, in init
self.services = wsdl and self.wsdl_parse(wsdl, debug=trace, cache=cache)
File "D:\apps\Python310\lib\site-packages\pysimplesoap\client.py", line 473, in wsdl_parse
xml = fetch(url)
File "D:\apps\Python310\lib\site-packages\pysimplesoap\client.py", line 457, in fetch
response, xml = self.http.request(url, "GET", None, {
File "D:\apps\Python310\lib\site-packages\httplib2_init_.py", line 1708, in request
(response, content) = self.request(
File "D:\apps\Python310\lib\site-packages\httplib2_init
.py", line 1424, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "D:\apps\Python310\lib\site-packages\pysimplesoap\transport.py", line 134, in _conn_request
return Httplib2Transport._conn_request(self, conn, request_uri, method, body, headers)
File "D:\apps\Python310\lib\site-packages\pysimplesoap\transport.py", line 118, in _conn_request
return httplib2.Http.conn_request(self, conn, request_uri, method, body, headers)
File "D:\apps\Python310\lib\site-packages\httplib2_init
.py", line 1346, in conn_request
conn.connect()
File "D:\apps\Python310\lib\site-packages\httplib2_init
.py", line 1138, in connect
self.sock = self._context.wrap_socket(sock, server_hostname=self.host)
File "D:\apps\Python310\lib\ssl.py", line 513, in wrap_socket
return self.sslsocket_class._create(
File "D:\apps\Python310\lib\ssl.py", line 1071, in _create
self.do_handshake()
File "D:\apps\Python310\lib\ssl.py", line 1342, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:997)

Aquí hay soluciones para Ubuntu. Pero no pude encontrar qué hacer en Windows, alguna idea por favor...?:

Ubuntu 20.04 - how to set lower SSL security level?

Qué hacer si se produce un error de conexión SSL (ssl.SSLError: [SSL: DH_KEY_TOO_SMALL]) en Ubuntu 20.04

Muchas Gracias.

reingart added a commit that referenced this issue Jul 13, 2022
Nota: dist no existe más en python 3.10
El ajuste se deja para todos los linux y windows con esta version.

Este es un problema de la configuración del server de AFIP

+ info: https://bugs.python.org/issue46136
@reingart
Copy link
Owner

Hola @intersoftsistemas , gracias por el reporte detallado!
Ahi cree un PR con el fix: #95
Básicamente hay que hacer un "downgrade" de los protocolos de seguridad: bajar a una versión compatible con los servers de AFIP (no soporta los últimos más seguros)
El workaround ya estaba pero había un problema con python3.10 porque se deprecó un modulo y no podía detectar bien cuando aplicar el fix.
Si pueden probarlos y confirmarnos que funciona bien sería buenisimo!

@intersoftsistemas
Copy link
Author

Excelente Mariano @reingart, solución rápida, y funcional.
Probamos el [fix ] (#95) propuesto, y ahora el cliente se crea correctamente, en los entornos descriptos.
Luego, si llegamos a detectar algo más, ya solicitando caes en producción, informaremos.
Muchas Gracias.

reingart added a commit that referenced this issue Jul 14, 2022
Fix #94 SSL: DH_KEY_TOO_SMALL (python 3.10 win)
@jonyr
Copy link

jonyr commented Feb 15, 2024

Estimados! La única solucion es modificar la configuración a nivel servidor?
No es posible algo como cambiar el contexto a nivel de la libreria?

import ssl
context = ssl.create_default_context()
context.set_ciphers("DEFAULT@SECLEVEL=1")

Muchas gracias!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants