2016-10-13 2 views
2

Ich versuche, einen node.js mqtt Client mit TLS mit dem Paket unten zu implementieren;node.js mqtt Client mit TLS

https://www.npmjs.com/package/mqtt#client

Der Code für die Ausführung von MQTT Client ohne TLS ist wie folgt;

Wie sollte der obige Code geändert werden, um TLS auf dem mqtt-Client zu verwenden?

Der mosca-MQTT-Broker wurde als eigenständiger Server mit dem folgenden Befehl ausgeführt.

mosca --key ./tls-key.pem --cert ./tls-cert.pem --http-port 3000 --http-bundle --http-static ./ | pino 

Antwort

5

sollte ausreichen, um die Teil der URL zu mqtts://

mqtts://test.mosquitto.org zu ändern.

Selbst signierte Zertifikate

Sie können die folgende Option auf die connect Funktion übergeben, wenn die Verwendung von Zertifikaten selbstsignierten (nur für Testzwecke):

mqtt.connect('mqtts://test.mosquitto.org', { 
    rejectUnauthorized: false 
}); 
+0

Dies wird nicht funktionieren, da der Broker ein selbstsigniertes Zertifikat verwendet, so dass der Client nicht weiß, es zu vertrauen. – hardillb

+1

@ user91579631 Wenn Sie selbstsignierte Zertifikate verwenden, können Sie 'rejectUnauthorized: false' als Option übergeben. Edit: Ich habe die Informationen zu der Antwort hinzugefügt. – notion

+0

Scheint, dass der Client das vom Broker verwendete Zertifikat und Schlüssel nicht kennen muss. Vielen Dank. – user781486

3

Sie müssen die mqtt.connect() bieten Funktion mit einem Optionsobjekt, das das CA-Zertifikat enthält, das zum Überprüfen der Verbindung verwendet werden soll.

Das Optionsobjekt muss einen Schlüssel ca enthalten, der auf das Zertifikat verweist, das zum Signieren des Brokerzertifikats verwendet wird. Da es so aussieht, als ob Sie ein selbstsigniertes Zertifikat verwenden, ist dies das gleiche, das vom Broker verwendet wird.

Der ca Schlüssel here beschrieben

Oder Sie können jedes Zertifikat mit dem rejectUnauthorized Schlüssel erlauben wie in @ Begriff Antwort erwähnt. Aber das macht es unmöglich zu erkennen, ob sich jemand als Broker ausgibt

+0

Wie kann ich 'ca' Schlüssel in der Option angeben? Ich konnte keine "ca" -Option finden [hier] (https://www.npmjs.com/package/mqtt#client) – user3496167

+1

Aber es sagt, dass das Optionsobjekt auch an 'tls.connect()' übergeben wird Es kann also auch jede dieser Optionen enthalten. – hardillb

+0

Danke. Ich werde es versuchen. – user3496167

Verwandte Themen