paho.mqtt 连接失败,总是 return - 1

paho.mqtt Failed to connect, always return - 1

#define CA "/mnt/key/ca.crt"
#define CLIENT_KEY "/mnt/key/client.key"
#define CLIENT_CRT "/mnt/key/client.crt"
void onConnectFailure(void *context, MQTTAsync_failureData *response)
{
    finished = 1;
    printf("[CS55]Connect failed, rc %d\n", response ? response->code : 0);
    delay(1000);
    connect_server();
}
void connect_server()
{
    if (MQTTAsync_connect(client, &conn_opts) != MQTTASYNC_SUCCESS)
    {
        printf("[CS55]connect_server()\n");
        finished = 1;
    }
}
void mqtt_connect()//连接
{
    MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;

    pthread_mutex_init(&serial_mute, NULL);      //互斥锁
   
    MQTTAsync_create(&client, mqtt_addr, client_id, MQTTCLIENT_PERSISTENCE_NONE, NULL);
    MQTTAsync_setCallbacks(     //设置回调
        client,
        NULL,
        connlost,
        msgarrvd,
        NULL);
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    conn_opts.onSuccess = onConnect;
    conn_opts.onFailure = onConnectFailure;
    conn_opts.username = username;
    conn_opts.password = password;
    conn_opts.context = client;

    ssl_opts.struct_version = 5;
    ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2;
    ssl_opts.verify = true;
    ssl_opts.keyStore = CLIENT_KEY;
    ssl_opts.trustStore = CLIENT_CRT;
    ssl_opts.enableServerCertAuth = true;
    ssl_opts.CApath = CA;
    conn_opts.ssl = &ssl_opts;
//    ssl_opts.enabledCipherSuites = "TLSv1";
    int rc;
    if ((rc = MQTTAsync_connect(client, &conn_opts))!= MQTTASYNC_SUCCESS)
    {
        printf("[CS55]MQTTAsync_connect return %d\n",rc);
        finished = 1;
    }

//    connect_server();               //开始请求连接服务器

    while (subscribe_fail != 1)      //while(订阅成功)
    {
        delay(1000);    //延迟1000ms
    }
    MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
    disc_opts.onSuccess = onDisconnect;

    rc = MQTTAsync_disconnect(client, &disc_opts);
    if (rc != MQTTASYNC_SUCCESS)
    {
        //printf("Failed to start disconnect, return code %d\n", rc);
    }
    MQTTAsync_destroy(&client);
}

日志:

[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1
[CS55]Connect failed, rc -1

我启动程序后会执行回调函数onConnectFailure,然后一直打印连接失败的日志。调试了半天,也不知道问题出在哪里。我可能需要帮助。

我尝试在mqtt中添加证书认证,但是无法连接到服务器。我没有找到参考用例。如果有,请分享给我

connopts.ssl = &ssl_opts;
connopts.ssl->trustStore = CA;
connopts.ssl->privateKey = CLIENT_KEY;
connopts.ssl->keyStore = CLIENT_CRT;
connopts.ssl->enableServerCertAuth = ture;
connopts.ssl->verify = true;

参考上述代码,连接服务器时注意使用SSL协议 ssl://11.22.33.44 :8883。