Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

303
Views
Conexión MQTT TLS

Me gustaría conectar un MQTT-Client de prueba a mi aplicación Node.js como MQTT-Broker. estoy usando la biblioteca aedes de moscajs

Mi MQTT-Client es la herramienta "MQTT-Explorer" y aquí está mi aplicación Node.js:

 const fs = require('fs'); const aedes = require('aedes')(); const options = { key: fs.readFileSync('certs/server_key.pem'), cert: fs.readFileSync('certs/server_cert.pem'), }; // const server = require('net').createServer(aedes.handle); const server = require('tls').createServer(options, aedes.handle); const PORT = 8881; server.listen(PORT, () => { console.log(`server is up and running: PORT [${PORT}] - ID [${aedes.id}]`); });

Puedo conectarme sin problemas a PORT=1881 con const server = require('net').createServer(aedes.handle) y también puedo conectarme a PORT=8881 con const server = require('tls').createServer(options, aedes.handle)

Con la Herramienta xca-2.4.0.msi 2.4.0 he creado un Archivo de CERTIFICADO ca.pem y un CERTIFICADO server_cert.pem y una CLAVE PRIVADA server_key.pem (firmada desde ca.pem) como Servidor. La clave para CA y el servidor son diferentes:

XCA

Para mi cliente MQTT, en ADVANCED, CERTIFICATES, SERVER CERTIFICAT (CA) , seleccioné el archivo ca.pem. Si selecciono "Cifrado", funciona. Pero si selecciona "validar certificado", error: el nombre de host/IP no coincide con los nombres alternativos del certificado: IP: 127.0.0.1 no está en la lista de certificados

Explorador de MQTT

Lamentablemente no se que estoy haciendo mal, gracias de antemano :(

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

MQTT Explorer está construido usando Node.js y la biblioteca MQTT MQTT.js. Según este problema :

Node.js requiere que la dirección IP esté en subjectAltNames para el certificado y no en el CN. Tal vez MQTT.fx no requiera eso, pero debería.

y:

Si el certificado de su servidor dice CN=localhost en el campo Asunto, conéctese usando localhost y no 127.0.0.1 y debería funcionar. Si dice CN=127.0.0.1, debe crear uno nuevo porque Node.js no validará la dirección IP a menos que esté en la extensión SAN. Hay una manera de evitarlo en el código (creo que es una opción llamada checkServerIdentity), pero preferiría arreglar mi certificado si tuviera este problema.

En esta respuesta se establece una justificación del enfoque adoptado en Node, que incluye la siguiente cita de RFC2818: HTTP Over TLS :

En algunos casos, el URI se especifica como una dirección IP en lugar de un nombre de host. En este caso, el IPAddress subjectAltName debe estar presente en el certificado y debe coincidir exactamente con la IP en el URI.

Como está utilizando MQTT sobre TLS (a diferencia de HTTP sobre TLS), podría argumentar que lo anterior no se aplica pero, dado que el uso principal de la biblioteca TLS es para el tráfico HTTP, tiene sentido que confirme el RFC por defecto.

Tienes algunas opciones que incluyen:

  • Utilice un nombre de host (p. ej., localhost ) en lugar de una IP al crear el certificado o conectarse.
  • Agregue la IP como un subjectAltName
  • Modifique la biblioteca para usar un noop checkServerIdentity (vea esta respuesta ).
  • Use otra aplicación para probar (realmente no se recomienda ya que algunas aplicaciones funcionarán y otras no). El problema citado anteriormente menciona que MQTT.fx funciona.
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!