MQTT su TLS - certificato ca sul client

4

Stiamo sperimentando con MQTT nel nostro progetto.

Abbiamo una connessione sicura con il nostro broker mqtt, quindi mqtt su TLS (o mqtts) e usiamo un certificato firmato appropriato (non autofirmato) da una fonte attendibile.

Con alcuni dei nostri clienti dobbiamo passare il certificato radice CA (del fornitore di certificati che ha firmato il nostro certificato server) per consentire una procedura di handshake efficace.

Ad esempio quando si utilizza 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

Se non passiamo il certificato CA in questi esempi sopra, non possiamo connetterci (la connessione è rifiutata).

Tuttavia, quando si utilizza questo client MQTT nodo non è necessario passare il certificato radice CA. Perchè no? Sospetto che questo client MQTT nodo utilizzi l'archivio certificati sul mio computer per convalidare il nostro certificato server, ma non riesco a trovare alcuna conferma su questo nella documentazione.

Sto attento ed è per questo che non voglio limitarmi a questa conclusione, poiché potrebbe esserci qualcosa di sbagliato nella configurazione del server / broker MQTT che consente la connessione senza convalidare correttamente il certificato del server?

Quindi la domanda: node-mqtt utilizza l'archivio certificati sul mio computer? O ha un negozio con certificati radice CA affidabili?

    
posta Wilt 03.03.2017 - 15:56
fonte

1 risposta

4

Iniziamo con TLS .

Certi fare due cose Criptare una connessione e Convalidare l'autenticità di entrambi i lati della connessione. Tutti i principali browser Web hanno un elenco di Autorità di certificazione inclusi per impostazione predefinita (ex Firefox ). Queste CA sono utilizzate per controllare tutti i certificati che generalmente accost sul web. Allo stesso modo, nel tuo browser hai anche un cert lato client che è unico per te (unico per la tua sessione?), Tuttavia, non è firmato da alcun tipo di CA e quindi non hai modo di dimostrare al server HTTPS che sei chi dici di essere.

È possibile verificare l'identità di entrambi i lati della connessione TLS. Per fare ciò, è necessario configurare un server HTTPS con un elenco di certificati lato client attendibili ... o un certificato "radice" con cui tutti i certificati lato client sono firmati (si pensi alla rete interna https per un'azienda).

Node.js è basato su chrome e like chrome utilizza un elenco di Autorità di certificazione ref ... da una breve panoramica della mia ricerca su google, questo elenco è configurabile all'interno di node.js stesso.

Quando ho configurato MQTT per TLS in passato ho sempre eseguito certificati autofirmati per la crittografia senza preoccuparmi troppo della verifica dell'identità ... Suppongo che tu possa configurare un elenco di Autorità di certificazione o un certificato di root, ma nel migliore dei casi è un'ipotesi.

    
risposta data 03.03.2017 - 16:20
fonte

Leggi altre domande sui tag