我在mosca
后端运行代理,并且使用标准的mqtt
npm 库。我遇到了一个问题,我似乎无法理解设置 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