主题中讨论的其他器件:UNIFLASH
您好!
我正在尝试评估 MQTT_CLIENT 示例的安全通信功能 、该示例是我创建并从 simplelink_sdk_wifi 插件_2_40_00_22\examples\rtos\MSP_EXP432E401Y\demos\MQTT_CLIENT 移植到 STM32L4微控制器和 BoostXL-CC3135评估模块。
我了解到、首先我必须在 CC3135 模块的闪存中刷写我的亚马逊证书。
因此、在我的嵌入式软件中、我添加了代码、允许我在 CC3135 闪存中的所用代码下方写入证书文件:
1
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18
19.
20.
21.
22.
23
24
25
26
27.
28.
29.
30
31.
32
33.
34
|
#define CERT_WRITE_CHUNK_SIZE 1500 int32_t writeCert(uint8_t *data , uint32_t len) { int32_t fHdl; uint8_t fileName[] = "/cert/iot/cert.pem" ; int32_t status; uint32_t offset; uint32_t writeLen; fHdl = sl_FsOpen(fileName, SL_FS_CREATE | SL_FS_OVERWRITE | SL_FS_CREATE_PUBLIC_READ | SL_FS_CREATE_MAX_SIZE( len ), NULL); if ( fHdl >= 0 ) { offset = 0; do { if (len < CERT_WRITE_CHUNK_SIZE) { writeLen = len; } else { writeLen = CERT_WRITE_CHUNK_SIZE; } status = sl_FsWrite(fHdl, offset, &(data[offset]), writeLen); offset += writeLen; } while (offset < len); sl_FsClose(fHdl,0,0,0); return 0; } else { return -1; } } |
成功执行此函数后、我尝试使用安全选项连接到 MQTT 代理、遗憾的是、连接结果失败、代码为-688 (sl_error_BSD_ESEC_ASn_NO_signer_E)。
请注意、我使用了在 https://www.amazontrust.com/repository/SFSRootCAG2.pem 下找到的 CA 证书。
我对该论坛进行了多次研究、并了解到我应该使用此链接中提供的证书:https://certs.secureserver.net/repository/sf-class2-root.crt、并且证书未正确添加到 CC3135 闪存中。
因此、借助 Uniflash 工具、我能够刻录我在以下链接中找到的亚马逊根证书: https://certs.secureserver.net/repository/sf-class2-root.crt。 因此、安全 MQTT 连接已建立、 因此我有几个问题需要补充:
- 使用 Uniflash 工具编写 CA 证书与我上面提到的代码源有何区别? (writeCert 函数),请注意,对于相同的 CA 文件,如果我使用 Uniflash 烧录证书 ,相反,使用 writeCert 函数,MQTT 连接函数返回失败(-456),MQTT 就可以正常工作。 我认为我应该修改 sl_FsClose (fHdl、0、0);函数参数、 方法和原因?
- 我使用的是非 TI wifi 模块,为了进行安全 MQTT 通信,我使用的是在 https://www.amazontrust.com/repository/SFSRootCAG2.pem 下找到的 CA 证书。 我在 CC3135 WIFI 模块中使用了相同的 CA 文件,结果是-688,为什么? 之后,我在该链接(https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/789112/2919312#2919312 )中找到 应该使用名为 SF-class2-root 的证书。 那么、这些证书之间有什么区别?为什么我应该使用 SF-class2-root 证书而不是 SFSRootCAG2证书?
- 当使用 MQTT 客户端示例进行安全 MQTT 通信时、UART 日志为:
.CONNACK:
连接成功
,次 Ack:
授予的 QoS 级别包括:
那么,如何验证 SSL 握手是否成功完成? 我是否可以假设我的通信是安全的?
是否有任何方法 可以检查握手过程?
我发现唯一一个有意义的注释是在 sl_SSL_notification_connected 安全回调案例下从未执行的,我认为这是因为它是在 sl_socket_ASYNC_EVENT 事件( simplelink_sdk_wifi 插件_2_40_00_22\examples\rtos\mqTT 客户端示例的 network_ic.c 文件)
4.我在使用安全通信之前和之后测量了 MQTT 吞吐量, 我注意到即使使用安全通信,MQTT 吞吐量结果也不会改变! 这是正常的吗?
我知道在使用 SSL 通信时、每个传输的数据包都添加了几个数据、因此 我预计会丢失吞吐量。
那么、我的吞吐量不会改变是正确的吗?
如果不是,通常是通过 MQTT 吞吐量结果的除法来实现的?
此致、
Ghada