Я пытаюсь хранить полезные данные MQTT в базе данных MongoDB с помощью NodeJS. Когда я запускаю мой код я получаю следующее сообщение об ошибке выскочил на сервере Mosquitto:Ошибка безопасности Mosquitto: ошибка OpenSSL: процедуры: SSL3_GET_RECORD: неправильный номер версии
1427756032: Socket error on client <unknown>, disconnecting.
1427756033: New connection from 146.175.138.141 on port 8883.
1427756033: OpenSSL Error: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Я не только один облицовочный эту ошибку, но предлагаемые решения на Google не будет работать для меня.
Я работаю в среде сервера Ubuntu14.04 TLS (trusty). Версия OpenSSL, которые я использовал, чтобы сделать свои собственные ключи и сертификаты является:
OpenSSL 1.0.1f 6 Jan 2014
Для изготовления этих ключей я следовал manual из Mosquitto.
Версия nodejs является:
v0.10.25
Конфигурация файла mosquitto:
port 8883
cafile /etc/keys/ca.crt
certfile /etc/keys/server.crt
keyfile /etc/keys/server.key
tls_version tlsv1
require_certificate true
nodejs Файл:
var mqtt=require('mqtt')
var mongodbClient=require('mongodb').MongoClient;
var deviceRoot="demo/device/"
var mqtthost = '146.175.138.141';
var KEY = '/etc/keys/client.key';
var CERT = '/etc/keys/client.crt';
var CAfile = '/etc/keys/ca.crt';
var options = {
host: mqtthost,
port: 8883,
protocolId: 'MQIsdp',
ca: CAfile,
keyPath: KEY,
certPath: CERT,
secureProtocol: 'TLSv1_method',
protocolId: 'MQIsdp',
protocolVersion: 3
};
var collection,client;
mongodbClient.connect("mongodb://localhost:27017/exampleDb", function(err,db){
if(err){return console.dir(err);}
collection=db.collection("test_mqtt");
client=mqtt.connect(options);
client.subscribe("#");
client.publish(deviceRoot, '21');
client.on('message', function(topic,payload){
str = payload.toString();
console.log(str);
var key=topic.replace(deviceRoot,'');
collection.update(
{ _id:key },
{ $push: { events: { event: { value:str, when:new Date() } } } },
{ upsert:true }
)})})
ключи должны работать, потому что публикации с следующая команда не является проблемой:
mosquitto_pub -h 146.175.138.141 -p 8883 -t Server -m helloworld --cafile /etc/keys/ca.crt --cert /etc/keys/client.crt --key /etc/keys/client.key --tls-version tlsv1
Любая идея, что я делаю неправильно?
Действительно, эта ошибка появляется, если брокер не может найти cafile. И да, если я удалю tls_version в конфигурации mosquitto, я получаю ошибку «client_hello».Если я установил mosquitto для прослушивания без использования TLS, код nodejs сможет установить соединение. Итак, вы правы. Благодарим вас за указание на настройки TLS. Но моя проблема не решена. Это нормально, что брокер больше не спрашивает меня о парольной фразе? Могут ли быть какие-либо проблемы с владением? –
Я не думаю, что москит (брокер) виноват, потому что он работает правильно с mosquitto_pub с TLS. Код nodejs не использует TLS, несмотря на то, что вы рассказываете об этом. Извините, я не могу с этим поделать. – ralight