MQTT sobre TLS - certificado de ca en el cliente

4

Estamos experimentando con MQTT en nuestro proyecto.

Tenemos una conexión segura con nuestro agente mqtt, así que mqtt sobre TLS (o mqtts) y usamos un certificado firmado apropiado (no autofirmado) de una fuente confiable.

Con algunos de nuestros clientes tenemos que pasar el certificado raíz de CA (del proveedor del certificado que firmó nuestro certificado de servidor) para permitir un procedimiento de intercambio exitoso.

Por ejemplo, al usar mosquitto:

# Publish
mosquitto_pub -h 'mqtt.example.com' -p 8883 --cafile "path/to/certificate/ca.pem" -u "username" -P "password" -t "planet/earth" -m "hello world"

# Subscribe
mosquitto_sub -h 'mqtt.example.com' -p 8883 -t "planet/earth" --cafile "path/to/certificate/ca.pem" -u "username" -P "password" -v -d

Si no pasamos el certificado CA en estos ejemplos anteriores, no podemos conectarnos (se rechaza la conexión).

Pero al utilizar este cliente MQTT de nodo no necesitamos pasar el certificado raíz de CA. Por qué no? Sospecho que este cliente MQTT de nodo utiliza el almacén de certificados en mi computadora para validar nuestro certificado de servidor, pero no puedo encontrar ninguna confirmación al respecto en la documentación.

Tengo cuidado y es por eso que no solo quiero llegar a esta conclusión, ya que también podría haber algún problema con la configuración del servidor / agente MQTT que permita la conexión sin validar el certificado del servidor correctamente.

Entonces, la pregunta: ¿node-mqtt usa el almacén de certificados en mi computadora? ¿O tiene una tienda con certificados raíz de CA confiables?

    
pregunta Wilt 03.03.2017 - 15:56
fuente

1 respuesta

4

Empecemos con TLS .

Asegúrese de hacer dos cosas Cifrar una conexión y Validar la autenticidad de ambos lados de la conexión. Todos los principales navegadores web tienen una lista de Autoridades de certificado incluidas de forma predeterminada (por ejemplo, Firefox ). Estas CA se utilizan para verificar todos los certificados a los que generalmente se accede en la web. Del mismo modo, también tiene un certificado del lado del cliente en su navegador que es único para usted (¿exclusivo de su sesión?), Sin embargo, no está firmado por ningún tipo de CA y, por lo tanto, no tiene forma de demostrarle al servidor HTTPS que está quien dices que eres.

Es posible verificar la identidad de ambos lados de la conexión TLS. Para hacer esto, un servidor HTTPS debe configurarse con una lista de certificados del lado del cliente para confiar ... o un certificado "Root" con el que todos los certificados del lado del cliente están firmados (piense en https de red interna para una empresa).

Node.js se basa en Chrome y, al igual que Chrome, utiliza una lista de Autoridades de Certificación ref ... a partir de un breve vistazo a mi búsqueda en Google, esta lista se puede configurar dentro de node.js.

Cuando configuré MQTT para TLS en el pasado, siempre he hecho certificados autofirmados para el cifrado sin preocuparme demasiado por la verificación de identidad ... Supongo que puede configurar una lista de Autoridades de certificación o un certificado raíz, pero es una conjetura en el mejor de los casos.

    
respondido por el CaffeineAddiction 03.03.2017 - 16:20
fuente

Lea otras preguntas en las etiquetas