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.

[参考译文] CC3220SF-LAUNCHXL:尝试将 MQTT 与 AWS IOT 连接

Guru**** 2553450 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1005249/cc3220sf-launchxl-trying-to-connect-mqtt-with-the-aws-iot

器件型号:CC3220SF-LAUNCHXL

尊敬的:  

我正在尝试将简单链路 CC3220器件与 AWS IOT 连接。 我只读了几个介绍根 CA 证书、客户端证书和客户端私钥设置的线程。  

我正在使用 泛美卫生组织 MQTT 库来实现连接、但我不是从哪里开始。 在这里、我进行了一些试错、但工作不好。

任何人都可以向我解释如何启动它。 ?

    SlSockSecureFiles_t cert;

    cert.SecureFiles[0] = 1;
    cert.SecureFiles[1] = 1;
    cert.SecureFiles[2] = 1;

    rc = TLSConnectNetwork(&gAppState.network, "end-point",
                           8883, &cert,  SL_SO_SEC_METHOD_TLSV1_2, SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA, false);

int TLSConnectNetwork(Network *n, char *addr, int port,
                      SlSockSecureFiles_t *certificate,
                      unsigned char sec_method, unsigned int cipher,
                      char server_verify)
{
    SlSockAddrIn_t sAddr;
    int addrSize;
    int retVal;
    unsigned long ipAddress;

    retVal = sl_NetAppDnsGetHostByName((_i8*) addr, strlen(addr), &ipAddress,
                                       AF_INET);
    if (retVal < 0)
    {
        return -1;
    }

    sAddr.sin_family = AF_INET;
    sAddr.sin_port = sl_Htons((unsigned short) port);
    sAddr.sin_addr.s_addr = sl_Htonl(ipAddress);

    addrSize = sizeof(SlSockAddrIn_t);

    n->my_socket = sl_Socket(SL_AF_INET, SL_SOCK_STREAM, SL_SEC_SOCKET);
    if (n->my_socket < 0)
    {
        return -1;
    }

    SlSockSecureMethod_t method;
    method.SecureMethod = sec_method;

    retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET, SL_SO_SECMETHOD,
                           &method, sizeof(method));
    if (retVal < 0)
    {
        ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
        return retVal;
    }

    SlSockSecureMask_t mask;
    mask.SecureMask = cipher;
    //_u8 mask= cipher;
    retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET, SL_SO_SECURE_MASK,
                           &mask, sizeof(mask));
    if (retVal < 0)
    {
        ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
        return retVal;
    }

    if (certificate != NULL)
    {

        if (certificate->SecureFiles[0] == 1)
        {
            retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET,
                                   SL_SO_SECURE_FILES_CA_FILE_NAME,
                                   "/cert/AmazonRootCA1.pem", strlen("/cert/AmazonRootCA1.pem"));

            if (retVal < 0)
            {
                ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
                return retVal;
            }
        }

        if (certificate->SecureFiles[1] == 1)
        {
            retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET,
                                   SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,
                                   "/cert/certificate.pem.pem", strlen("/cert/certificate.pem"));

            if (retVal < 0)
            {
                ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
                return retVal;
            }
        }
        if (certificate->SecureFiles[2] == 1)
        {
            retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET,
                                   SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,
                                   "/cert/msd-private.pem.pem", strlen("/cert/msd-private.pem"));

            if (retVal < 0)
            {
                ASSERT_ON_ERROR(retVal, "sl_SetSockOpt() failed");
                return retVal;
            }
        }
    }

    /*
     retVal = sl_SetSockOpt(n->my_socket, SL_SOL_SOCKET, SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME, (const void *)certificates[1], strlen((const char *)certificates));
     if(retVal < 0){
     return retVal;
     }
     */
    retVal = sl_Connect(n->my_socket, (SlSockAddr_t*) &sAddr, addrSize);

    if (retVal < 0)
    {
        if (server_verify || retVal != -453)
        {
            sl_Close(n->my_socket);
            return retVal;
        }
    }

    return retVal;
}

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

    有人可以在这里提供帮助?

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

    您好 Ketan、

    查看 SimpleLink AWS IoT 插件、该插件处理使用 AWS 服务所需的连接握手。

    此致、

    Sarah

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

    尊敬的

    感谢您的建议。 我认为我已正确加载了证书、但在设置证书路径后进行连接时、我收到错误@SL_ERROR_BSD_ESECUNKNOWNROOTCA。

    根据错误代码@SL_ERROR_BSD_ESECUNKNOWNROOTCA、它表示它已连接至 AWS、但 使用根 CA 进行验证是未知的。  

    请帮助解决错误。  

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

    您好 Ketan、

    此错误意味着无法根据受信任根证书目录验证根 CA、这可能是因为您使用的是"虚拟"游乐场证书目录。

    您是使用 AWS SDK 中的示例、还是 直接使用您的第一个帖子中的套接字 API?

    此致、

    Sarah

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

    您好、

    是的、我使用的是直接套接字 API。  

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

    您好 Ketan、

    您可以使用 sl_SetSockOpt 禁用受信任根证书目录检查。 请参阅 NWP 编程人员指南的第7.5.4节"禁用受信任根证书目录"

    此致、

    Sarah

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

    尊敬的 

    是的。 我已禁用受信任根证书目录、在禁用受信任存储后、我获得日期验证失败。

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

    您好 Ketan、

    您可以在 MQTT_CLIENT 示例中找到有关如何更新器件日期和时间的示例。

    此致、

    Sarah

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

    尊敬的:

    是的、我使用 DeviceSet API 设置了日期时间、但没关系! 但每次都需要连接。 为什么新生成证书时失败的日期验证?

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

    您好 Ketan、

    每当器件复位时、日期和时间都会被清除。 客户通常在其应用程序中连接到 SNTP 服务器。 请参阅 SDK 中的 local_time 示例。

    此致、

    Sarah

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

    尊敬的

    我知道设备何时将被重置日期和时间也将被重置、但我不明白如果新创建证书、为什么日期和时间验证失败。 ? 这是否会导致任何问题功能?

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

    您好 Ketan、

    证书有一个"有效起始日期"字段、其中包含开始日期和结束日期。 当 RTC 重置时、它可能会重置为早于有效范围的某个日期(我认为这是2013年的某个日期)。

    此致、

    Sarah

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

    感谢您的解释、我始终使用实际日期设置 RTC、一切都可以通过 MQTT 连接和发送数据包。

    感谢您的支持。