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.
尊敬的 Charles:
我们已在未加密的情况下设置了 MQTT 客户端、并且运行正常。 但是、在添加 SSL/TLS 时、完全不起作用。 MQTTClient_connect 返回-2021、但在更详细地调试时、 结果表明 SlNetIfNDK_sockStartSec 无法创建安全套接字、因为它无法检索证书。
出于安全原因、证书和密钥不存储在文件系统中、而是作为固件内的数组、由 SlNetif_loadSecObj 将它们传递到 SlNet:
MQTTClient_Handle mc; MQTTClient_Params mp; MQTTClient_ConnParams mcp; // Virtual file names of the certificates char *msf[3] = { "ca.pem", "cert.pem", "key.pem" }; //Certificates const uint8_t sc_sec_ca[] = "-----BEGIN CERTIFICATE-----\n" "MIIDbTCCAlWgAwIBAgIQOJS41HdZ0aBH554ITPDjmzANBgkqhkiG9w0BAQsFADBJ\n" ... "3v1WIFze0MYF6XK6IQ6ia6o=\n" "-----END CERTIFICATE-----"; const uint16_t sc_sec_ca_l = sizeof(sc_sec_ca); const uint8_t sc_sec_pk[] = "-----BEGIN PRIVATE KEY-----\n" "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMgIYvGyxtmoyK\n" ... "zVBWLpomdgRuAVM6Zgs8MfaK4zoD/c8KwI5A4iOqCpZseCAu9ohTNMTnB9VeVSkb\n" "TMZFwZa3TMRvDY7uZVGzEQB2\n" "-----END PRIVATE KEY-----"; const uint16_t sc_sec_pk_l = sizeof(sc_sec_pk); uint8_t sc_sec_pc[] = "-----BEGIN CERTIFICATE-----\n" "MIIFZDCCBEygAwIBAgITEwAAAAxYaQk7gSlDEgAAAAAADDANBgkqhkiG9w0BAQsF\n" ... "pJ1Ek8d73ZDgO4IAkyhJC0UtwcuMFS51TeSov+THh6A+ewMi34DINw==\n" "-----END CERTIFICATE-----"; const uint16_t sc_sec_pc_l = sizeof(sc_sec_pc); // Pass credentials to SlNet e = SlNetIf_loadSecObj(SLNETIF_SEC_OBJ_TYPE_CERTIFICATE, msf[0], strlen(msf[0]), sc_sec_ca, sc_sec_ca_l, SLNETIF_ID_1); e = SlNetIf_loadSecObj(SLNETIF_SEC_OBJ_TYPE_CERTIFICATE, msf[1], strlen(msf[1]), sc_sec_pc, sc_sec_pc_l, SLNETIF_ID_1); e = SlNetIf_loadSecObj(SLNETIF_SEC_OBJ_TYPE_RSA_PRIVATE_KEY, msf[2], strlen(msf[2]), sc_sec_pk, sc_sec_pk_l, SLNETIF_ID_1); mcp.netconnFlags = MQTTCLIENT_NETCONN_URL | MQTTCLIENT_NETCONN_SEC | MQTTCLIENT_NETCONN_SKIP_DOMAIN_NAME_VERIFICATION | MQTTCLIENT_NETCONN_SKIP_CERTIFICATE_CATALOG_VERIFICATION; mcp.serverAddr = "..."; mcp.port = 8883; mcp.method = SLNETSOCK_SEC_METHOD_SSLv3_TLSV1_2; mcp.cipher = SLNETSOCK_SEC_CIPHER_FULL_LIST; mcp.nFiles = 3; mcp.secureFiles = msf; mp.clientId = mac; mp.connParams = &mcp; mp.mqttMode31 = false; mp.blockingSend = true; MQTTClient_subscribe(mc, msp, 1); // ... code to run client ... MQTTClient_connect(mc);
如果仅传递 CA 证书并将.files 设置为1或传递全部3个文件、则 MQTTClient_connect 将始终返回-2021。
SlNetIf_loadSecObj 始终返回0、在调试视图中可以看到它正确地存储了信息。 正确意味着它将文件名存储为文件名、并将数据缓冲区存储如下:
这似乎很明显、但查看错误发生的位置时、并不是:
上图显示了 lookupObj 函数、此函数由 SlNetIfNDK_sockStartSec 调用以获取证书。 在这里,你可以看到名称和 buf 是反相的,所以 lookupObj 在将名称与名称进行比较时不会找到任何东西。
我注意到、过去有一个亚马逊的"插件"、它应该在非常类似的根证书、客户端证书和密钥中工作。 此 SDK 不再提供下载。 这仅仅是因为亚马逊已经改变了他们的东西,所以它不会再与他们工作了吗? 如果是、确认我们无意使用该代码连接到亚马逊、而只是将其与我们的实施进行比较、您能否提供该链接?
如果您对此问题有任何其他建议或想法、请随时发表评论!
此致
彼得
Unknown 说:我注意到过去有一个亚马逊的"插件"应该在非常类似的情况下使用根证书、客户端证书和密钥。 此 SDK 不再提供下载。 [/报价]尊敬的 Peter:
您指的是哪个具体的 SDK? 如果过去 TI.com 上提供了可供下载的内容、我可以查找。 我对 AWS 不熟悉、对 TLS 的 MQTT 也不熟悉。
尊敬的 Charles:
这里是原始下载链接的缓存版本: https://cc.bingj.com/cache.aspx?q=awsniot+sdk+msp432+plugin&d=4793149510718722&mkt=it-IT&setlang=it-IT&w=UqjeYpUbmbKDrDZIqcUgOnANhhwS8bSI
此致
彼得
尊敬的 Peter:
URL 似乎来自非 TI 网站 ROM bingj.com。 我已单独查找此 AWS 插件、但在产品页面上找不到它。 产品页面上列出了其他可下载的插件。
这是 Bing 的缓存功能,显示的页面是 TI.com 上直到去年9月. 这是为了向您提供可能有助于获取文件的所有信息...
项目代码为 SIMPLELINK-MSP432E4-IDE PLUGIN-FOR-AWSIOT、指向安装程序的链接为 dr-download.ti.com/.../aws_msp432e4_4_10_00_03.exe。
尊敬的 Peter:
我需要咨询支持 TI.com 的 TI 团队、了解这个错误的链接。 我不希望该问题很快得到解决。
也许可以更容易地获得文件,而通过 PM 发送?
尊敬的 Peter:
我两周前提交了 TT、昨天收到我们网络团队的回复、称该链接有意从 TI.com 撤下进行下载。 现在,我不知道为什么它被撤回。 我可以向网络团队跟进、但与此同时、TLS 示例是否为 C:\ti\simplelink_msp432e4_SDK_4_20_00_12\examples\rtos\MSP_EXP432E401Y\ns\tcpechotls help? 我自己不熟悉 TLS 和 MQTT 应用程序。
我也在旅行,明天会回来。 我的答复可能会有延误。
尊敬的 Charles:
我预料到这一点。 可能是由于 AWS 中的更改、插件不再用于此目的。 然而,它仍然是足够的,而且对我们的目的也是至关重要的。
tcpechotls 用处不大、因为问题位于 MQTT 库中、而不是 TLS 中。
此致
彼得
尊敬的 Peter:
要将此插件插入、需要完成一个过程。 我无法保证您能够获得内部批准、以便再次发布、因为插件是出于合法原因(例如法律或其他原因)而被关闭的。