Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

299
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda