AWS IoT embedded C SDK fleet_provisioning demo TLS握手超时问题
AWS IoT Embedded C SDK Fleet Provisioning Demo TLS握手超时排查方案
错误码-26624对应mbedtls的MBEDTLS_ERR_SSL_TIMEOUT,你已确认证书、预配置、关联策略正常的前提下,按以下顺序排查:
1. 网络连通性排查
- 优先验证设备到AWS IoT端点的8883端口连通性,在设备侧执行
telnet <AWS_IOT_ENDPOINT> 8883或nc -zv <AWS_IOT_ENDPOINT> 8883,确认无防火墙、安全组、NAT规则拦截出站8883请求 - 验证设备DNS解析正常,确认解析出的AWS IoT端点IP匹配对应区域的AWS服务IP段,无DNS污染问题
2. 超时参数配置排查
- 202108.00版本的fleet provisioning demo默认TLS握手超时时间偏短,找到
mbedtls_pkcs11_posix.c中的tlsHandshakeTimeoutMs配置项,默认值通常为5000ms,可修改为10000~15000ms后重新编译测试,弱网环境下短超时极易触发握手失败 - 确认fleet provisioning demo的MQTT Keep Alive、socket超时配置与其他正常运行的demo保持一致,避免单独设置过短的超时参数
3. PKCS11证书存储排查
- 日志中
Could not open corePKCS11_Claim_Certificate.dat for reading为首次运行的正常提示,后续会自动写入证书,可在pkcs11_operations.c的证书写入逻辑后新增打印,输出写入证书的序列号、签名值,与AWS控制台的Claim证书比对,避免写入过程出现截断、编码错误 - 确认PKCS11私钥读写权限正常,202108.00版本的corePKCS11 PAL层对部分嵌入式文件系统兼容性不佳,可临时切换为直接从文件路径加载证书的逻辑跳过PKCS11存储,验证是否为PKCS11层导致的问题
4. TLS握手参数校验
- 确认fleet provisioning demo使用的TLS版本、加密套件与其他正常运行的demo完全一致,部分旧版本demo默认开启TLS 1.3,若对应区域AWS IoT端点未开启TLS 1.3支持会导致握手卡住超时,可强制指定TLS 1.2版本测试
- 确认SNI扩展已开启:AWS IoT要求TLS握手必须携带SNI扩展,202108.00版本的fleet provisioning demo存在SNI未正确填充的已知bug,可在mbedtls配置中开启
MBEDTLS_SSL_SERVER_NAME_INDICATION,并手动调用mbedtls_ssl_set_hostname传入AWS IoT端点地址
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

