2016-10-13 30 views
2

以下のパッケージを使用してTLSを使用してnode.js mqttクライアントを実装しようとしています。node.js TLSを使用するmqttクライアント

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

TLSなしMQTTクライアントを実行するためのコードは次の通りです。上記のコードは、MQTTクライアントでTLSを使用するように変更する必要がありますどのように

var mqtt = require('mqtt') 
var client = mqtt.connect('mqtt://test.mosquitto.org') 

client.on('connect', function() { 
    client.subscribe('presence') 
    client.publish('presence', 'Hello mqtt') 
}) 

client.on('message', function (topic, message) { 
    // message is Buffer 
    console.log(message.toString()) 
    client.end() 
}) 

mosca MQTTブローカーは、以下のコマンドを使用してスタンドアロンとして実行されました。

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

答えて

5

mqtts://

mqtts://test.mosquitto.orgにURLの一部を変更するのに十分でなければなりません。 (テスト目的のみのための)自己署名証明書を使用するときは、connect関数に次のオプションを渡すことができ

自己署名証明書

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

これは、ブローカが自己署名証明書を使用しているため、 – hardillb

+1

@ user91579631自己署名証明書を使用する場合は、オプションとして 'rejectUnauthorized:false'を渡すことができます。編集:私は答えに情報を追加しました。 – notion

+0

クライアントは、ブローカが使用する証明書と鍵を知る必要はないと思われます。ありがとう。 – user781486

3

あなたはmqtt.connect()を提供する必要があります接続を検証するために使用するCA証明書を含むoptionsオブジェクトを使用します。

オプションオブジェクトには、caキーが含まれている必要があります。これは、ブローカー証明書の署名に使用する証明書を指します。自己署名証明書を使用しているように見えるので、これはブローカーが使用するものと同じです。

caキーが

hereに記載されているか、あなたは、@概念の答えで述べたようにrejectUnauthorizedキーを持つすべての証明書を許可することができます。しかし、それは誰かがあなたのブローカーを偽装しているかどうかを検出することを不可能にします

+0

オプションに 'ca'キーを指定する方法は?私は 'ca'オプションを見つけることができませんでした[https://www.npmjs.com/package/mqtt#client] – user3496167

+1

しかし、オプションオブジェクトは' tls.connect() 'にも渡されます。それらのオプションのどれも含めることができます。 – hardillb

+0

ありがとうございます。私はそれを試してみましょう。 – user3496167

関連する問題