This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC3235SF:无法使用安全 MQTT 客户端演示连接到 AWS 代理。

Guru**** 2582405 points
Other Parts Discussed in Thread: CC3235SF, CC3200

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/995039/launchxl-cc3235sf-not-able-to-connect-to-the-aws-broker-using-secure-mqtt-client-demo

器件型号:LAUNCHXL-CC3235SF
主题中讨论的其他器件:CC3235SFCC3200

您好!

我只是尝试使用"mqTT_client_CC3235SF_LAUNCHXL_tirtos_ccs"演示代码创建安全 MQTT 客户端以与亚马逊代理连接。 我已为同一个添加了证书、但无法连接 AWS 服务器。 代码中是否还有其他要修改的内容。  

连接 WiFi 网络后 、我在串行上看到以下消息。  

[Gen: info]已成功订阅所有主题

[生成:信息] MQTT_EVENT_SERVER_DISCONNECT

#define APPLICATION_NAME         "MQTT client"
#define APPLICATION_VERSION      "2.0.0"

#define SL_TASKSTACKSIZE            2048
#define SPAWN_TASK_PRIORITY         9

// un-comment this if you want to connect to an MQTT broker securely
#define MQTT_SECURE_CLIENT

#define MQTT_MODULE_TASK_PRIORITY   2
#define MQTT_MODULE_TASK_STACK_SIZE 2048

#define MQTT_WILL_TOPIC             "/cc3235sf"
#define MQTT_WILL_MSG               "will_msg_works"
#define MQTT_WILL_QOS               MQTT_QOS_0
#define MQTT_WILL_RETAIN            false

#define MQTT_CLIENT_PASSWORD        NULL
#define MQTT_CLIENT_USERNAME        NULL
#define MQTT_CLIENT_KEEPALIVE       0
#define MQTT_CLIENT_CLEAN_CONNECT   true
#define MQTT_CLIENT_MQTT_V3_1       true
#define MQTT_CLIENT_BLOCKING_SEND   true

#define MQTT_CONNECTION_FLAGS       MQTTCLIENT_NETCONN_URL | MQTTCLIENT_NETCONN_SEC \
                                    | MQTTCLIENT_NETCONN_SKIP_CERTIFICATE_CATALOG_VERIFICATION
#define MQTT_CONNECTION_ADDRESS     "*****-ats.iot.us-east-1.amazonaws.com"
#define MQTT_CONNECTION_PORT_NUMBER     8883


char *MQTTClient_secureFiles[3] = {"ca.crt", "cert.crt", "key.key"};

MQTTClient_ConnParams mqttConnParams =
{
    MQTT_CONNECTION_FLAGS,                  // connection flags
    MQTT_CONNECTION_ADDRESS,                // server address
    MQTT_CONNECTION_PORT_NUMBER,            // port number of MQTT server
    SLNETSOCK_SEC_METHOD_SSLv3_TLSV1_2,     // method for secure socket
    SLNETSOCK_SEC_CIPHER_FULL_LIST,         // cipher for secure socket
    3,                                      // number of files for secure connection
    MQTTClient_secureFiles                  // secure files
};


.
.
.
.
.
.
.

.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您通过原始 MQTT 连接到 AWS 而不使用 AWS SDK 或 SimpleLink AWS 插件代码是否有具体原因? 该插件将提供一些示例、可简化大部分低级 MQTT 连接设置。

    如果您确实希望继续使用 MQTT 示例连接到 AWS、我为 CC3200 MQTT 示例编写了一些代码、这些代码将会有所帮助:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/wi-fi-forum/881308/cc3200-launchxl-cc3200/3268750#3268750

    CC3200 MQTT 库与 CC3235中使用的库类似、您当前使用的 API 和结构设置将熟悉。

    我建议您查看我的示例代码、看看您是否可以将代码调整为该代码、然后再次尝试连接到 AWS。 请告诉我这是否不起作用、我可以提供进一步的指示。

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michael、  

    感谢您的支持。 我已经浏览过您的示例代码并修改了 CC3235sf 的代码、但仍然遇到无效 CA 证书错误。 我还尝试了 TI 为 AWS 连接提供的 CA 证书。 我使用的所有认证均有效、并且所有认证均适用于 AWS SDK。 是否需要进行任何其他修改?  

    char *MQTTClient_secureFiles[4] = {"/cert/key.key", "/cert/8f6ea5d0f9-certificate.pem", "/cert/AmazonRootCA1.pem", NULL};
    
    MQTT_IF_ClientParams_t mqttClientParams =
    {
         ClientId,                  // client ID
         MQTT_CLIENT_USERNAME,      // user name
         MQTT_CLIENT_PASSWORD,      // password
         MQTT_CLIENT_KEEPALIVE,     // keep-alive time
         MQTT_CLIENT_CLEAN_CONNECT, // clean connect flag
         MQTT_CLIENT_MQTT_V3_1,     // true = 3.1, false = 3.1.1
         MQTT_CLIENT_BLOCKING_SEND, // blocking send flag
         &mqttWillParams            // will parameters
    };
    
    MQTTClient_ConnParams mqttConnParams =
    {
        MQTTCLIENT_NETCONN_URL,                  // connection flags
        MQTT_CONNECTION_ADDRESS,                // server address
        MQTT_CONNECTION_PORT_NUMBER,            // port number of MQTT server
        SLNETSOCK_SEC_METHOD_SSLv3_TLSV1_2,     // method for secure socket
        SLNETSOCK_SEC_CIPHER_FULL_LIST,         // cipher for secure socket
        4,                                      // number of files for secure connection
        MQTTClient_secureFiles                  // secure files
    };

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    查看您的证书文件名、似乎您使用的是 AmazonRootCA1.pem。 这实际上不是要使用的正确方法。 请查看我在此处发布的文章、了解有关连接至 AWS 时使用的正确证书的信息:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/wi-fi-forum/789112/cc3220sf-sl_error_bsd_esec_asn_no_signer_e--688/2919312#2919312

    如果您使用该证书、您是否能够进行连接?

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已经尝试过您建议的 CA 证书(SF-class2-root),但仍然无法连接。 我还检查了 MQTTBox 中的所有证书、所有证书都正常工作。 是否存在任何与 TLS 相关的问题?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    最好知道您已经使用 MQTTBox 测试了认证、这意味着云设置良好、认证正常。

    在运行演示程序之前、您是否已使用 Imagecreator 将您的认证编程到器件上?

    当 AWS MQTT 连接失败时、您是否会收到任何错误代码或异步事件回调、以提供任何其他错误数据?

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    感谢您的支持、现在我可以通过更改以下参数来连接到 AWS。  

    #define MQTT_CONNECT_FLAGS       MQTCLIENT_NETCONN_URL | MQTCLIENT_NETCONN_SEC