Ошибка SSL_ERROR_SSL (Eclipse Paho) ​​при попытке подключения к частному брокеру MQTT с OpenSSL - PullRequest
0 голосов
/ 11 июля 2019

Я настраиваю проект, который передает информацию о носимых устройствах (в данном случае GearFit2 от samsung) брокеру MQTT, но он не может подключиться к серверу SSL.В конце концов, полученная мной ошибка прослеживается до SSLSocket_error (внутри SSLSocket.c), который затем возвращает возвращаемое значение SSL_ERROR_SSL

Идея возникла из реализации Дживоном Парк: https://craftroom.tizen.org/mqtt/. По сути, яудалось подключиться к серверу, отличному от SSL, но не к серверу SSL (который предназначен для этого проекта)

    #define ADDRESS     "ssl://webdemo.edu:8883"
    #define USERNAME "username"
    #define PASSWORD "password"

    void sensor_event_callback(sensor_h sensor, sensor_event_s *event, void *user_data)
    {
        dlog_print(DLOG_DEBUG, LOG_TAG, "callback reached");


        MQTTClient client;
        MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
        MQTTClient_message pubmsg = MQTTClient_message_initializer;
        MQTTClient_deliveryToken token;
        MQTTClient_SSLOptions sslopts = MQTTClient_SSLOptions_initializer;

        signal(SIGINT, cfinish);
        signal(SIGTERM, cfinish);


        rc = MQTTClient_create(&client, ADDRESS, "host", MQTTCLIENT_PERSISTENCE_NONE, NULL);

        conn_opts.keepAliveInterval = 20;
        conn_opts.cleansession = 1;
        conn_opts.username = USERNAME;
        conn_opts.password = PASSWORD;
        conn_opts.ssl = &sslopts;


        if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
            dlog_print(DLOG_DEBUG, LOG_TAG, "Failed to connect, return code %d\n", rc);
            exit(EXIT_FAILURE);
        }

    ...
    }



// within SSLSocket.c
int SSLSocket_error(char* aString, SSL* ssl, int sock, int rc)
{
    int error;

    FUNC_ENTRY;
    if (ssl)
        error = SSL_get_error(ssl, rc);
    else
        error = ERR_get_error();
    if (error == SSL_ERROR_WANT_READ || error == SSL_ERROR_WANT_WRITE)
    {
        Log(TRACE_MIN, -1, "SSLSocket error WANT_READ/WANT_WRITE");
    }
    else
    {
        static char buf[120];

        if (strcmp(aString, "shutdown") != 0)
            Log(TRACE_MIN, -1, "SSLSocket error %s(%d) in %s for socket %d rc %d errno %d %s\n", buf, error, aString, sock, rc, errno, strerror(errno));
         ERR_print_errors_fp(stderr);
        if (error == SSL_ERROR_SSL || error == SSL_ERROR_SYSCALL){
            dlog_print(DLOG_DEBUG, "sensor", "error val %d", error);
            error = SSL_FATAL;
        }
    }
    FUNC_EXIT_RC(error);
    return error;
}

Выход MQTTClient_connect (client, & conn_opts)) равен -3, что соответствуетв SSL_FATAL.Как я уже говорил ранее, копание глубже в файл SSLSocket.c показывает, что это возвращаемое значение было потому, что было что-то, что заставило программу вернуть ошибку SSL_ERROR_SSL, которая не прослеживается ни для чего другого.В идеальном мире результат будет 0 (что означает успех).Может ли быть ошибка при реализации библиотеки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...