Сбой соединения tls в моските

Я сгенерировал сертификаты и смог установить успешное соединение, используя команду ниже

mosquitto_sub -t "hello/world" -v --cafile ../certs/ca.crt --cert ../certs/client.crt --key ../certs/client.key

Хотя я пытаюсь сделать то же самое с моим кодом, используя те же сертификаты, я сталкиваюсь со следующими ошибками

СТОРОНА КЛИЕНТА

LIBMOSQUITTO 1004005
8: Unable to connect: A TLS error occurred.
Success

СТОРОНА СЕРВЕРА

1452241406: New connection from 127.0.0.1 on port 1883.
1452241406: OpenSSL Error: error:140780E5:SSL routines:SSL23_READ:ssl handshake failure
1452241406: Socket error on client <unknown>, disconnecting.

Вот мой код

int main(){
printf("LIBMOSQUITTO %d\n", LIBMOSQUITTO_VERSION_NUMBER);

        if ((m = mosquitto_new("rtr", 1, NULL)) == NULL) {
                fprintf(stderr, "Out of memory.\n");
                exit(1);
        }

        int rc = mosquitto_tls_set(m,
                        "path/to/ca.crt",          /* cafile */
                        NULL,                   /* capath */
                        "/path/to/client.crt",             /* certfile */
                        "/path/to/client.key",             /* keyfile */
                        NULL                    /* pw_callback() */
                        );

        if (rc != MOSQ_ERR_SUCCESS) {
                fprintf(stderr, "Cannot set TLS CA: %s (check path names)\n",
                                mosquitto_strerror(rc));
                exit(3);
        }
#if 0
        mosquitto_tls_opts_set(m,
                        SSL_VERIFY_PEER,
                        NULL,                   /* tls_version: "tlsv1.2", "tlsv1" */
                        NULL                    /* ciphers */
                        );
        mosquitto_tls_insecure_set(m, 1);
#endif
        if ((rc = mosquitto_connect(m, "localhost", 1883, 20)) != MOSQ_ERR_SUCCESS) {
                fprintf(stderr, "%d: Unable to connect: %s\n", rc,
                                mosquitto_strerror(rc));
                perror("");
                exit(2);
        }
}

ОБНОВЛЕНИЕ: также проверено для порта 8884

2 ответа

Решение

Вы не звонили mosquitto_lib_init(),

Ваш код подключается к порту 1883, который обычно не является портом TLS; в зависимости от того, что вы настроили в mosquitto.conf Я думаю, что вам нужен порт 8883, при условии, что у вас настроен приемник TLS на 8883.

Я также отмечаю, что вы используете /path/to а также path/to которая может быть или не быть опечаткой копирования / вставки.

Другие вопросы по тегам