Клиент, использующий libmosquitto, получает сообщение «Внутренняя ошибка оповещения tlsv1» используя TLS, отлично работает без TLS

Я пытаюсь настроить клиента с помощью libmosquitto. Подключение к брокеру работает как шарм, с TLS и без него. Но всякий раз, когда я пытаюсь отправить данные через соединение TLS, я получаю сообщение об ошибке:

Blockquote
1486712210: ошибка OpenSSL: ошибка: 14094438: подпрограммы SSL: ssl3_read_bytes: внутренняя ошибка предупреждения tlsv1
1486712210: ошибка OpenSSL: ошибка: 140940E5: процедуры SSL: ssl3_read_bytes: сбой рукопожатия ssl
1486712210: Ошибка сокета на клиенте, отключение.
Blockquote

Я попробовал тестовый клиент из Git-репозитория Mosquitto, mosquitto / тест / Библиотека / с / 08-SSL-подключения-CERT-Auth-enc.c
, тот же результат.

Моя текущая конфигурация сервера:

listener 1883

listener 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
certfile /etc/mosquitto/certs/werkstatt.logicway.net.crt
keyfile /etc/mosquitto/certs/werkstatt.logicway.net.key
require_certificate true
tls_version tlsv1

Исходный код:

#include <stdio.h>
#include <string.h>
#include <sstream>
#include <iostream>

#include <QtCore/QCoreApplication>
#include <QtDBus/QtDBus>
#include <mosquitto.h>

#include "logicgateway_data.h"#include "logicgateway_client.h"
using namespace std;const char *data_out;

struct mosquitto *mosq = NULL;

// BEschreibung kommt
int LGW_Client::receive_data(QString in_basket)
{
data_out = in_basket.QString::toLatin1();
cout << "Wert erhalten: " << data_out << endl;
mosquitto_publish(mosq,0,LGW_TOPIC,strlen(data_out),data_out,0,true);
return 0;
}int main (int argc, char **argv)
{
// Verbindung mit der Qt-Dbus Session erstellen
QCoreApplication app(argc,argv);

if(!QDBusConnection::sessionBus().isConnected()){
fprintf(stderr,"Kann nicht mit D-Bus Session verbinden.\n""Um sie zu starten, geben Sie bitte ein:\n""\teval `dbus-launch --auto-syntax`\n");
return 1;
}// Mosquitto initialisieren

mosquitto_lib_init();

mosq = mosquitto_new(CID,false,NULL);

if(!mosq)
{
printf("Nicht erstellt\n");
return 1;
}
else
{
printf("Mosquitto erfolgreich verbunden!\n");
}// TLS Anbindung
if (LGW_PORT == 8883)
{
mosquitto_tls_opts_set(mosq,1,"tlsv1",NULL);
mosquitto_tls_set(mosq,"ca.crt",NULL,"client.crt","client.key", NULL);

}

// Mosquitto Verbindung zum Broker erstellen
if(mosquitto_connect(mosq,BROKER_ADRESS,LGW_PORT,60))
{
fprintf(stderr, "Fehler!\n");
return 1;
}
else
{
printf("Laeuft!\n");
}// DBus Service registrieren um Daten zu empfangen
if(!QDBusConnection::sessionBus().registerService(SERVICE_NAME_CLIENT)) {
fprintf(stderr, "%s\n", qPrintable(QDBusConnection::sessionBus().lastError().message()));
exit(1);
}

printf ("LGW-Client: Gestartet...\n");
LGW_Client lgwclient;
QDBusConnection::sessionBus().registerObject("/",&lgwclient, QDBusConnection::ExportAllSlots);

app.exec();// Fehlerbehandlung und aufräumen
//fprintf(stderr, "%s\n", qPrintable(QDBusConnection::sessionBus().lastError().message()));

mosquitto_loop_forever(mosq, -1, 1); //Bin mir nicht sicher, ob ich das hier wegen der While-Schleife brauche

mosquitto_destroy(mosq);
mosquitto_lib_cleanup();

return 1;
}

(Пожалуйста, будьте осторожны в отношении кода в целом. Я чертовски новичок и полностью осознаю, что многое можно улучшить. Но сейчас я просто хочу, чтобы соединение TLS работало)

Вещи, которые работают:

  • Выполнение кода с портом 1883 (без TLS)
  • Запуск mosquitto_sub и mosquitto_pub с помощью ca.crt, client.crt и client.key, которые я сгенерировал generate-CA.sh и информация из документации комаров

Я довольно уверен, это просто крошечная ошибка, и я просто слишком неопытен, чтобы увидеть это. Надеюсь, вы можете помочь.

Спасибо заранее!

Mathias

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]