使用 pem 证书向远程代理发送消息
Sending a message to a remote broker using a pem-certificate
我正在编写脚本以使用 MQTT 获取一些传感器数据,以特定方式转换传入值并将其转发到使用加密通信的云。
该脚本在 RaspberryPi 3 (Raspbian) 上运行,其中 Mosquitto 作为 MQTT 代理运行(传感器将数据发送到此代理)
到目前为止,我从传感器获得了信息,我可以根据需要转换内容。
问题是当我尝试连接到远程代理时,我收到以下错误消息
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Error (native)
at Object.createSecureContext (_tls_common.js:67:17)
at Object.TLSSocket._init.ssl.onclienthello.ssl.oncertcb.exports.connect (_tls_wrap.js:1015:46)
at Object.buildBuilder (/home/pi/node_modules/mqtt/lib/connect/tls.js:13:20)
at MqttClient.wrapper [as streamBuilder] (/home/pi/node_modules/mqtt/lib/connect/index.js:135:36)
at MqttClient._setupStream (/home/pi/node_modules/mqtt/lib/client.js:246:22)
at new MqttClient (/home/pi/node_modules/mqtt/lib/client.js:227:8)
at Object.connect (/home/pi/node_modules/mqtt/lib/connect/index.js:138:10)
at Object.<anonymous> (/home/pi/GATT_server/MQTT_module.js:3:25)
我已经尝试将 Mosquitto 配置为 MQTT 桥以使用配置文件,看起来它可以工作(服务重新启动时没有错误消息)。
使用Mosquitto做桥接脚本无法订阅传感器发布的主题的问题
我不熟悉这些证书,但是通过阅读文件的文档 'client-options.cs' 我写了以下几行:
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://localhost', 'port:1883');
var remoteBroker = mqtt.connect('mqtts://xxx.xxx.io',
{port:8883,
protocol:'ssl',
username:'username',
password:'123password123',
cert:'/etc/mosquitto/certs/ca.pem'} );
/*....
.... many lines later
....*/
remoteBroker.publish(topicToUseOnRemoteMqttBroker, PayloadToForward);
我做的对吗?还是我错过了什么?
如果证书适用于 Mosquitto-Bridge,那么远程代理也应该适用。 - 是吗?
如果您有关于此主题的其他 links/papers - 我喜欢学习 ;P
Google 给了我这么多信息 - 我不知道从哪里开始:(
cert
的条目不应是证书文件的路径,而是实际的证书本身。您需要读入文件并传递它。
像这样:
var remoteBroker = mqtt.connect('mqtts://xxx.xxx.io',
{port:8883,
protocol: 'ssl',
username: 'username',
password: '123password123',
cert: fs.readFileSync('/etc/mosquitto/certs/ca.pem')} );
我正在编写脚本以使用 MQTT 获取一些传感器数据,以特定方式转换传入值并将其转发到使用加密通信的云。 该脚本在 RaspberryPi 3 (Raspbian) 上运行,其中 Mosquitto 作为 MQTT 代理运行(传感器将数据发送到此代理)
到目前为止,我从传感器获得了信息,我可以根据需要转换内容。
问题是当我尝试连接到远程代理时,我收到以下错误消息
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Error (native)
at Object.createSecureContext (_tls_common.js:67:17)
at Object.TLSSocket._init.ssl.onclienthello.ssl.oncertcb.exports.connect (_tls_wrap.js:1015:46)
at Object.buildBuilder (/home/pi/node_modules/mqtt/lib/connect/tls.js:13:20)
at MqttClient.wrapper [as streamBuilder] (/home/pi/node_modules/mqtt/lib/connect/index.js:135:36)
at MqttClient._setupStream (/home/pi/node_modules/mqtt/lib/client.js:246:22)
at new MqttClient (/home/pi/node_modules/mqtt/lib/client.js:227:8)
at Object.connect (/home/pi/node_modules/mqtt/lib/connect/index.js:138:10)
at Object.<anonymous> (/home/pi/GATT_server/MQTT_module.js:3:25)
我已经尝试将 Mosquitto 配置为 MQTT 桥以使用配置文件,看起来它可以工作(服务重新启动时没有错误消息)。
使用Mosquitto做桥接脚本无法订阅传感器发布的主题的问题
我不熟悉这些证书,但是通过阅读文件的文档 'client-options.cs' 我写了以下几行:
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://localhost', 'port:1883');
var remoteBroker = mqtt.connect('mqtts://xxx.xxx.io',
{port:8883,
protocol:'ssl',
username:'username',
password:'123password123',
cert:'/etc/mosquitto/certs/ca.pem'} );
/*....
.... many lines later
....*/
remoteBroker.publish(topicToUseOnRemoteMqttBroker, PayloadToForward);
我做的对吗?还是我错过了什么?
如果证书适用于 Mosquitto-Bridge,那么远程代理也应该适用。 - 是吗?
如果您有关于此主题的其他 links/papers - 我喜欢学习 ;P Google 给了我这么多信息 - 我不知道从哪里开始:(
cert
的条目不应是证书文件的路径,而是实际的证书本身。您需要读入文件并传递它。
像这样:
var remoteBroker = mqtt.connect('mqtts://xxx.xxx.io',
{port:8883,
protocol: 'ssl',
username: 'username',
password: '123password123',
cert: fs.readFileSync('/etc/mosquitto/certs/ca.pem')} );