Novedad: el cortafuegos de IA supervisa toda la plataforma y explica cada incidente con palabras sencillas. Vea cómo funciona

paho-mqtt en una Pi 3 de laboratorio falla el handshake TLS con 'certificate is not yet valid'

paho-mqtt en una Pi 3 de laboratorio falla el handshake TLS con 'certificate is not yet valid'

Resuelto 7 5

Traducido del English por IA ·

Soy estudiante, primera publicación. Estoy haciendo un registrador de humedad del suelo para un proyecto de laboratorio: Pi 3, sensor capacitivo mediante un ADS1115, paho-mqtt 1.6, enviando a Hermetry por el 8883. En mi Wi-Fi de casa todo funciona. En el laboratorio falla siempre:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: certificate is not yet valid (_ssl.c:1006)

La red del laboratorio bloquea muchas cosas, así que también probé a conectarme a la IP del broker en lugar del nombre de host (la resolví en casa y la puse fija), y entonces el error cambia a una falta de coincidencia del nombre de host. Reinstalé certifi y llamé a client.tls_set() con y sin la ruta de ca_certs. Nada ayuda. ¿Es el cortafuegos del laboratorio el que está interfiriendo con TLS?

♥ 0

Traducido del English por IA ·

¿Está siquiera abierto el 8883 en esa red? En algunos lugares solo permiten salir por el 80 y el 443.

♥ 0

Traducido del English por IA ·

Debe estar abierto, el handshake comienza, simplemente falla en el certificado.

♥ 0

Traducido del English por IA ·

Quizás necesite un certificado de cliente para el broker. Tuvimos que cargar uno en los PC de nuestra línea.

Ground loops are my cardio.
♥ 0

Traducido del English por IA ·

¿Qué muestra date en la Pi cuando estás en el laboratorio?

♥ 2

Traducido del English por IA ·

…indica marzo del año pasado. En casa está bien.

♥ 0

Traducido del English por IA ·

Pues eso es. Una Pi 3 no tiene reloj en tiempo real. Al arrancar restaura la hora que guardó en el último apagado limpio (fake-hwclock) y luego espera a NTP. Tu red de laboratorio bloquea NTP (UDP 123), así que el reloj se queda en el pasado y, para la biblioteca TLS, el certificado del servidor aún no es válido. Lo he visto en la mitad de las Pi de campo que he puesto en marcha tras cortafuegos muy restrictivos.Soluciones, elige una:

# 1. pide a TI el servidor NTP interno y úsalo
sudo nano /etc/systemd/timesyncd.conf
  [Time]
  NTP=ntp.your-lab.example
sudo systemctl restart systemd-timesyncd
timedatectl   # "System clock synchronized: yes"

# 2. si solo está abierto el 443: sincroniza con las cabeceras HTTPS
sudo apt install htpdate
sudo htpdate -s https://www.example.org

Quita la IP fija. El broker necesita SNI, así que conéctate por nombre de host; el certificado se comprueba con ese nombre de todos modos, por eso obtuviste el error de discrepancia. Un client.tls_set() sencillo con el paquete de CA del sistema está bien; Tyler, no se necesita certificado de cliente para los inicios de sesión con token, el servidor lo pide pero no lo exige.Además, haz que el script espere a un reloj sincronizado antes de conectarse; si no, un reinicio en el laboratorio volverá a romperlo. Un bucle sencillo sobre timedatectl show -p NTPSynchronized funciona. Consulta la sección TLS de MQTT.

If it isn't logged, it didn't happen.
Solución aceptada♥ 5

Traducido del English por IA ·

TI me dio el servidor NTP interno, el reloj está bien, volví a poner el nombre de host, conecté al primer intento. También añadí el bucle de espera de sincronización a la unidad de systemd. No me puedo creer que fuera la fecha.

♥ 0
Viendo 8 entradas – de la 1 a la 8 (de un total de 8)
  • Debes estar registrado para responder a este debate.

Únete a la conversación

Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

Compartir