Черт, я создал брокера от комаров через изображение eclipse docker и недавно следовал этому руководству, чтобы добавить поддержку SSL / TLS: http://www.steves-internet-guide.com/mosquitto-tls/.
Когда я в sshed VPS, на котором работает брокер, я могу использовать команду:
mosquitto_pub -h VPS_NAME -t test/topic -p 8883 --cafile ca.crt -m message -u BROKER_USERNAME -P BROKER_PASSWORD
, и он публикует все отлично и денди. Однако, когда я запускаю ту же команду на локальном компьютере, я получаю сообщение об ошибке:
'Unable to connect (Lookup error.).
Я не получаю никаких новых журналов из контейнера посредника, поэтому я думаю, что он даже не достигает контейнера. Однако, когда я запускаю:
mosquitto_pub -h BROKER_IP_ADRESS -t test/topic -p 8883 --cafile ca.crt -m message -u BROKER_USERNAME -P BROKER_PASSWORD
я получаю ответ, который является ошибкой: произошла ошибка TLS, и в моих docker журналах я получаю:
1583004287: New connection from LOCAL_IP_ADDRESS on port 8883.
1583004287: OpenSSL Error: error:14037438:SSL routines:ACCEPT_SR_KEY_EXCH:tlsv1 alert internal error
1583004287: OpenSSL Error: error:140370E5:SSL routines:ACCEPT_SR_KEY_EXCH:ssl handshake failure
1583004287: Socket error on client <unknown>, disconnecting.
Я только в состоянии получить успешную публикацию publi sh, когда я добавляю команду --insecure к publi sh, однако я хочу убедиться, что клиент знает, что он обращается к нужному серверу, поэтому я не думаю, что это правильно решение.
В конце я хочу запустить клиент mqtt в приложении узла, я попробовал этот кусок кода:
const fs = require('fs');
const optionsz = {
ca: [ fs.readFileSync(__dirname + '/ca.pem') ],
host: 'BROKER_IP_ADDRESS',
servername: 'VPS_NAME',
port: 8883,
rejectUnauthorized : false,
username : 'BROKER_USERNAME', // mqtt credentials if these are needed to connect
password : 'BROKER_PASSWORD',
clientId : 'test',
// Necessary only if the server's cert isn't for "localhost".
checkServerIdentity: () => { return null; },
};
class MqttHandler {
constructor() {
this.mqttClient = null;
};
connect() {
// Connect mqtt with credentials (in case of needed, otherwise we can omit 2nd param)
this.mqttClient = mqtt.connect(this.host, optionsz);
...
, когда я запускаю это, я продолжаю получать события отключения и в моих docker журналах я получаю:
1583004505: New connection from LOCAL_IP_ADDRESS on port 8883.
1583004505: OpenSSL Error: error:140260FC:SSL routines:ACCEPT_SR_CLNT_HELLO:unknown protocol
1583004505: Socket error on client <unknown>, disconnecting.
Я действительно не понимаю, как решить эту проблему, я смог подключиться к брокеру без защиты SSL / TLS, но я хотел сделать связь моего устройства более безопасной. Спасибо за ваше время!