pablo-moreno / python-aemet

Python library to get AEMET data
MIT License
54 stars 18 forks source link

Uso de la librería en Raspberry Pi, problema SSL: DH_KEY_TOO_SMALL #27

Open emichester opened 3 years ago

emichester commented 3 years ago

Escribo esto por si a alguien le sirve. Y por cierto, muy buena implementación.

Al usar la librería en la RPi (en mi caso con Raspbian 10) salta la siguiente excepción:

. . .
  File "/usr/lib/python3.7/ssl.py", line 412, in wrap_socket
    session=session
  File "/usr/lib/python3.7/ssl.py", line 853, in _create
    self.do_handshake()
  File "/usr/lib/python3.7/ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1056)
. . . 

Si se usa en Ubuntu 18.04 LTS, por ejemplo, no da este problema. Pero en Raspbian sí, al haber sido actualizados los parámetros de seguridad en Debian OpenSSL (ver hilo1, hilo2->Edit). La solución (puede usar el editor de texto que desee, para el ejemplo uso vim.tiny que viene por defecto en Raspbian):

$ sudo vim.tiny /etc/ssl/openssl.cnf

Verá en las últimas líneas lo siguiente:

    360 [system_default_sect]
    361 MinProtocol = TLSv1.2
    362 CipherString = DEFAULT@SECLEVEL=2

Cambie el CipherString a nivel 1 y ya podrá ejecutar la librería sin problemas.

    362 CipherString = DEFAULT@SECLEVEL=1

(dejo el issue abierto, los contribuidores podrán cerrarlo cuando lo estimen conveniente)

pablo-moreno commented 3 years ago

Muchas gracias por la aportación @emichester! la dejo fijada y abierta para que se pueda ver!

javierpena commented 3 years ago

Otra opción que me ha funcionado a mí es añadir este par de líneas antes de la primera llamada al API:

import requests requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += 'HIGH:!DH:!aNULL'