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 TLS 安全问题-第2轮。

Guru**** 2487425 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1215785/launchxl-cc3235sf-mqtt-tls-security-issue---round-2

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

我不小心删除了原来的 e2egoing Issue t ticket、因此我将为我们打开一个新的 TT、以便在 MQTT 连接上启用 TLS。 劳伦斯建议我把公钥扣起来,并试图把它附加到论坛上。

e2e.ti.com/.../broker_2D00_client.zip e2e.ti.com/.../broker_2D00_client.zip  

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

    好的。 此证书看起来没有问题。 它应"按原样"用作 表中的第二个文件。

    您之前提供的私钥似乎无效(可能只有我获得的内容是无效的)、并且这似乎是唯一缺失的部分(应该是表中的第一个文件)。

    您是否可以尝试使用 mqtt_Client_secure_files[]={ 、"broker-client"、"broker-client.pem"、 "ca.intelliport.local"、NULL };

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

    感谢 Kobi、我今天下午会再试一次、让您知道如何进行。 一个问题是、文件列表中有5个文件、我认为它在4处超出了范围、" ca.intelliport.local"是否多余?

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

    请删除 "Broker-client"-这是错误的。 第二个文件名为 "broker-client.pem"。

    您是否可以尝试使用 mqtt_Client_secure_files[]={ 、"broker-client.pem"、 "ca.intelliport.local"、NULL };

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

    请删除 "Broker-client"-这是错误的。 第二个文件名为 "broker-client.pem"。

    请 尝试使用:

       mqtt_Client_secure_files[]={ 、"broker-client.pem"、 "ca.intelliport.local"、NULL };

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

    我进行了一次尝试、仍然收到-456错误。

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

    你好 Kobi。 我今天下午尝试了一些获取服务器证书的方法。 但是、当我在服务器上的端口8883上运行 openssl 命令时、系统将无法返回证书。 这可能是问题的一部分吗? 下面是 openssl 请求证书的输出:

    PS C:\Users\10385585> openssl s_client -showcerts -servername intelliportgw.eastus.cloudapp.azure.com -connect intelliportgw.eastus.cloudapp.azure.com:8883
    已连接(00000274)
    写入:errno=10054
    ——
    无可用对等证书
    ——
    未发送客户端证书 CA 名称
    ——
    SSL 握手已读取0字节、写入341字节
    验证:确定
    ——
    新、(无)、密码(无)
    此 TLS 版本禁止重新协商。
    压缩:无
    扩展:无
    未协商 ALPN
    未发送早期数据
    验证返回代码:0 (正常)
    ——

    如果我使用端口443、我将获得证书

    有什么想法?

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

    非常奇怪。 我不熟悉这个 openssl 命令。

    根据 我们之前测试(以及我之前的监听)的返回代码、我认为这不是真正的问题。

    关于-456、请验证应用程序中出现的根 CA 名称是否与文件系统中文件的路径和名称完全对应(如果您使用"ca.intelliport.local"、它必须位于 FS 根文件夹中。

    同时确保 n_files=4。

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

    尊敬的 Kobi:

    感谢您的答复。 我的所有文件都位于 FS 根文件夹中。 以下是相关声明:

    1)文件名

    #define PRIVATE_KEY                     "broker-client-key.pem"
    #define CLIENT_CERT                     "broker-client.pem"
    #define CA_FN                           "ca-fn"
    
    #define CLIENT_NUM_SECURE_FILES         4

    2) 2)连接参数:

    static char *Mqtt_Client_secure_files[CLIENT_NUM_SECURE_FILES] = {PRIVATE_KEY, CLIENT_CERT, CA_FN, NULL};
    
    MQTTClient_ConnParams g_mqtt_conn_params =
    {
        MQTTCLIENT_NETCONN_IP4 | MQTTCLIENT_NETCONN_SEC |
    //        MQTTCLIENT_NETCONN_SKIP_DOMAIN_NAME_VERIFICATION |
            MQTTCLIENT_NETCONN_SKIP_CERTIFICATE_CATALOG_VERIFICATION,
        MQTT_CONNECTION_ADDRESS,                 // SERVER_IP_ADDRESS,
        MQTT_CONNECTION_PORT_NUMBER,             // SECURED_PORT_NUMBER,
        SLNETSOCK_SEC_METHOD_SSLv3_TLSV1_2,
        SLNETSOCK_SEC_CIPHER_FULL_LIST,
        CLIENT_NUM_SECURE_FILES,
        Mqtt_Client_secure_files
    };

    3) 3)启动时以编程方式创建文件:

        int32_t         fHdl;
    
        fHdl =
            sl_FsOpen((uint8_t *)PRIVATE_KEY,
                      (SL_FS_CREATE | SL_FS_CREATE_FAILSAFE | SL_FS_OVERWRITE |
                       SL_FS_CREATE_MAX_SIZE(MAX_CACERT_SIZE)),NULL);
    
        if(fHdl >= 0)
        {
            ret = sl_FsWrite(fHdl, 0, (unsigned char *)brokerClientKeyPem, strlen(brokerClientKeyPem));
            ret = sl_FsClose(fHdl,0,0,0);
    
        }
        else
        {
        }
            
        fHdl =
            sl_FsOpen((uint8_t *)CLIENT_CERT,
                      (SL_FS_CREATE | SL_FS_CREATE_FAILSAFE | SL_FS_OVERWRITE |
                       SL_FS_CREATE_MAX_SIZE(MAX_CACERT_SIZE)),NULL);
    
        if(fHdl >= 0)
        {
            ret = sl_FsWrite(fHdl, 0, (unsigned char *)brokerClientPem, strlen(brokerClientPem));
            ret = sl_FsClose(fHdl,0,0,0);
    
        }
        else
        {
        }
        
    
        fHdl =
        sl_FsOpen((uint8_t *)CA_FN,
                  (SL_FS_CREATE | SL_FS_CREATE_FAILSAFE | SL_FS_OVERWRITE |
                   SL_FS_CREATE_MAX_SIZE(MAX_CACERT_SIZE)),NULL);
    
        if(fHdl >= 0)
        {
            ret = sl_FsWrite(fHdl, 0, (unsigned char *)srvCAPem, strlen(srvCAPem));
            ret = sl_FsClose(fHdl,0,0,0);
    
        }
        else
        {
        }
        

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

    所以你写的缓冲区中有问题(-456指的是 RootCA、所以似乎 serCAPem 有一些问题)。

    您可以使用 Uniflash 连接到器件、然后 下载文件(使用在线文件浏览器)、并将其与原始的"ca.intelliport.local"文件进行比较。

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

    这听起来是一个很好的计划。 一个问题:如何使用 Uniflash 并访问在线文件浏览器? 我使用的是 Uniflash 8.2.0、没有看到用于浏览器件 FS 的选项。 我可以使用"Memory"按钮来连接并查看器件存储器块、但如何才能看到文件系统呢?

    谢谢。

    John

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

    请参阅 https://www.ti.com/lit/swru469中的第6.13章

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

    大家好 Kobi、我读了文档的那个部分、没有在 Uniflash 中可以看到的"在线用户文件"按钮。 我很确定是在开发模式下运行、因为我可以使用 IAR IDE 和 XDS 调试器来加载、运行和调试器件。

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

    我建议您阅读整个文档。

    您应该处于 ImageCreator 的高级模式、此按钮仅在连接到器件后出现。

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

    很好的建议,内容丰富。 在高级模式下、无法连接。 我一直收到此错误: 操作失败:错误:SLImageCreator.exe:BootLoaderError、Timeout reading data。 当我没有进入新项目而只是使用从开始屏幕上配置的器件时、我可以读取器件存储器、所以我认为 UART 在工作。

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

    您必须 启动映像创建器并通过它进行操作(不支持其他 uniflash 接口)。

    我不确定您面临的这个错误是什么。 尝试断开 USB 电缆、然后重试。

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

    您必须 启动映像创建器并通过它进行操作(不支持其他 uniflash 接口)。

    我不确定这个误差是什么。 尝试断开 USB 电缆、然后重试。

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

    是的、这就是我所做的。 我启动映像创建器、确保选择正确的设备、输入 MAC 地址、确保选中使用原始 MAC 地址、然后单击连接。 连接失败并显示该超时消息。 在"简单"模式下也会失败。 我关闭所有电源、重新启动我的笔记本电脑等 无效。 我还验证了 UART 连接。

    以下是我的设置:

    这是错误:

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

    您使用的是 TI Launchpad 还是定制电路板?

    您能否在不更改 MAC 地址的任何内容的情况下进行尝试(创建新项目、尝试连接-默认情况下、它将从器件读取并使用 MAC 地址)?

    什么是 SOP (上电感应)引脚状态? (应为010)

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

    我使用的是定制电路板。 我正在使用 Launchpad 上的调试器在我们的硬件上进行调试、主要是关闭 XDS 到 Launchpad CC3235的长跳线组中的所有跳线、将定制板连接到跳线、然后将带状电缆连接到我们的硬件。

    我在没有 MAC 地址的情况下尝试过它、仍然无法连接。

    SOP 引脚实际上为010

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

    这是非常奇怪的。

    以前是否安装过 SP (这是必需的)? 功能?

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

    这是非常奇怪的。 关于 SP、我们刚更新到了 SDK 的6_10_00_05版、因此有必要对该 SDK 中的 SP 进行升级。 我以前还没有这样做过、我会阅读文档并给它一张照片。

    我为您提供了几项最新消息。 首先、我仍然无法获取设备上的 Uniflash 文件列表。 我们可以尝试另一种方法吗? 可以使用该 dslite.bat 脚本完成这项工作吗? 第二、昨天、我能够使用一组认证和同事生成的密钥在安全端口上连接到我们的 MQTT 代理。 这是令人鼓舞的,然而,当我把这些文件带到我们的应用程序,并编程闪存他们之前启动 MQTT ,我们得到-456错误的 CA 文件。 我在 SimpleLinkSockEventHandler 中再次设置了断点、没想到命中。

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

    如前所述、我认为您将证书保存在代码中的方式有一些(确保行末(每行末尾的"/r/n ")符号符合要求-与 Marty 的代码相比)或编写它 (确保使用的是 strlen(srvcapem)而不是 sizeof)。

     必须安装 A 服务(  通常对闪存进行编程)。 您可以使用 Uniflash 或 CCS 执行此操作。 两者都通过 UART 使用相同的方法、并且看起来它以前一直在工作(因为器件处于开发模式并且 JTAG 已启用)。 这使 Uniflash 连接变得奇怪。 请与之前制作的 Marty/Other 公司核实。  

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

    感谢你的耐心与我 Kobi。 您的上一篇文章引发了对文件的思考、这些文件让我现在能够连接到我们的网关安全 MQTT 端口!

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