0

バックエンドでブローカーを実行してmoscaおり、標準のmqttnpm lib を使用しています。SSL の設定時に何が起こっているのか把握できない問題に遭遇しました。自己署名 CA、サーバー、およびクライアント証明書を生成し、mosca をそのようにセットアップしました

var mosca = require('mosca');
var path = require('path');
var setup = {
  port: 8883,
  secure: {
    keyPath: path.join(__dirname, 'server.key'),
    certPath: path.join(__dirname, 'server.crt'),
    caPaths: path.join(__dirname, 'ca.crt'),
    requestCert: true,
    rejectUnauthorized: false
  }
}

var server = new mosca.Server(setup);

server.on('ready', function () {
  console.log('rdy');
});

Mosca ブローカーは問題を報告しておらず、これらの証明書でスムーズに動作します。ただし、mqttクライアント ライブラリを使用してこのブローカーに接続すると、次のようになります。

var mqtt = require('mqtt');
var fs = require('fs');
var tls = require('tls');

var client = mqtt.connect('ssl://localhost:8883', tls.connect({
  key: fs.readFileSync(path.join(__dirname, 'client.key')),
  ca: fs.readFileSync(path.join(__dirname, 'ca.crt')),
  cert: fs.readFileSync(path.join(__dirname, 'client.crt')),
  passphrase: 'client'
}));
client.on('error', function (err) {
  console.log(err)
});

接続しようとすると、エラー イベントがトリガーされ、次のエラーが発生します。

[Error: unable to verify the first certificate] code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'

設定してみprocess.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"ましたが効果なし。

クライアント証明書はさまざまなクライアントでテストされており、問題なく正常に動作します。ここで何が間違っていますか?

nodejs バージョン: 0.12.7 npm mosca バージョン: 0.32.1、npm mqtt バージョン: 1.4.3

4

0 に答える 0