大家好、团队、
我对 TSL/SSL 比较陌生,如果这是一个非常基本的疑问,请原谅我,但我正在尝试使用 WebSocket 头连接到云。 在 ESP32上使用 mbedtls 库实现的连接流程(根据我的理解)如下:
- 初始化 SSL 上下文并 配置和播种熵。
- 解析服务器根证书。
- 配置为客户端并使用端口443上的上述 SSL 上下文连接到主机。
- 执行 SSL 握手
- 使用 mbedtls_write API 发送以下标头。 标头如图所示:
const char * request_base =""
"获取/endpoints/54484249/ws HTTP/1.1\r\n "
"主机: \r\n "
"升级:WebSocket \r\n "
"连接:升级\r\n "
"Sec-WebSocket -密钥:KM3p2baQquchWOo6NKDjiIrws9Y=\r\n"
"Sec-WebSocket 版本:13\r\n"
"固件版本:3.5.0-beta.4\r\n"
"本地 IP:192.168.0.12\r\n"
"设备无线 Mac: \r\n "
6.使用 mbedtls_read 从服务器接收响应
我想在 CC3235中实施一个等效的过程来连接到同一个云。 因此,我采取了以下步骤:
1.通过使用 sl_Socket (sa->sa_family、sl_sock_stream、sl_SEC_socket)提供 IP 来打开安全的 TCP 套接字;
2.使用 SNTP 设置器件日期和时间。
3.使用 sl_SetSockOpt API 将根 CA 证书设置为.pem 格式、安全掩码和安全方法。
4.使用 sl_Connect 连接到服务器。 我最初得到-114、然后第二次返回0。 因此、我假设 SSL 握手成功。
此假设是否正确?
然后、我使用 sl_Send 将上述标头发送到服务器、并传输所有字节。 此外、不存在 sl_socket_TX_failed_event。
6.将数据发送到服务器后,我正在等待响应,但是我始终得到 SL_ERROR_BSD_EAGAIN (-11)作为响应,然后它进入 FAULTISR()。
此外、在检查服务器日志后、可以清楚地看到 sl_Send 数据未到达服务器。
就我检查过他们没有使用任何 WebSocket 数据包结构或 WebSocket 库而言、只需使用 TSL 通过安全 TCP 套接字发送上述缓冲区。
如果大家能够了解缺少哪些内容、这将非常有帮助、并且应该是在 CC3235中实现相同功能的正确方法。