主题中讨论的其他器件:UNIFLASH、 CC3100、 CC3100SDK
你(们)好
我正在使用 MQTT 协议(TCP/IPv4)对物联网网络进行编程。 使用泛美卫生组织的库,我成功地制作了一个 API,其中我有正确连接、ping、pub/sub 和断开的函数。
现在、对于下一步、我想为安全连接实施 TLS。 为此,我已经采取了以下步骤来实现这一目标,但没有成功。
1.使用 OpenSSL 制作证书(适用于基于证书的 TLS)。
我已使用 iosto 服务器和 GUI MQTT 客户端应用程序测试了证书。 所以这里没有问题。
2.将客户端的证书转换为.der 文件,并创建一个 C 应用程序,将.der 文件转换为字节数组。
我已经这样做了、因此我可以使用 FS_API (uniflash 不是一个选项)、但如果这是正确的方法、我不会这样做。 运行该应用程序后、我复制了字节阵列、该应用程序输出并将其粘贴到 CCS 应用程序中的数组中。 该文件是使用名称参数 "mqtt_ca.der"在 cc3100mod 上创建的(我已经测试过此文件)。
3.我编写了以下函数来连接到服务器:
_u32 cipher = sl_SEC_MASK_TLS_RSA_WITH_AES_128_CBC_SHA256; _u8 method = sl_SO_SEC_METHOD_TLSv1; int TLSConnectNetwork (int g_SockID、SlSockAddrIn_t sAddr、SlsockSecureFiles_t*证书、 unsigned char sec_method、unsigned int cipher) { Int addrSize; Int RetVal; addrSize = sizeof (SlSockAddrIn_t); G_SockID = sl_Socket (sl_AF_iNet、sl_sock_stream、sl_SEC_Socket); if (g_SockID < 0){ 返回-1; } SlSockSecureMethod 方法; method.secureMethod = sec_method; RetVal = sl_SetSockOpt (g_SockID、sl_SOL_Socket、sl_SO_SECMETHOD、&method、sizeof (method)); if (RetVal < 0){ 返回 RetVal; } SlSockSecureMask; mask.secureMask =密码; RetVal = sl_SetSockOpt (g_SockID、sl_SOL_Socket、sl_SO_SECURE_MASK、&MASK、sizeof (MASK)); if (RetVal < 0){ 返回 RetVal; } RetVal = sl_SetSockOpt (g_SockID、sl_SOL_Socket、sl_SO_SECURE_FILES_CA_FILE_NAME、sl_SSL_CA_CERT、strlen (sl_SSL_CA_CERT)); if (RetVal < 0) { 返回 RetVal; } RetVal = sl_Connect (g_SockID、(SlSockAddr_t *)&sAddr、addrSize); if (RetVal < 0){ sl_close (g_sockID); 返回 RetVal; } 返回 RetVal; }
我在网络编程方面比较陌生、从未使用过 TLS/SSL、所以有人能帮我吗?
提前感谢!