Closed i3water closed 6 years ago
@i3water
您好,从你提供的日志未能确定连接失败的原因。
1.非对称加密: 请确认证书路径填写正确。
2.对称加密: 从日志上看,你的使用的方式不正确,代码根目录make.setting
提供加密方法的选项,
若要使用非对称加密,则设置FEATURE_ASYMC_ENCRYPTION_ENABLED = y
;
对称加密,则需设置FEATURE_ASYMC_ENCRYPTION_ENABLED = n
3.如果方便的话可以提供你使用的productID和deviceName来定位你反馈的问题所在。
另外若要查看更详细的debug信息,可以修改编译选项,以debug模式运行
BUILD_TYPE = debug
详细使用请参考官方文档: https://cloud.tencent.com/document/product/634/11912 https://cloud.tencent.com/document/product/634/12552
非常感谢,配置make.settings
后重新编译对称加密
调试信息如下
./mqtt_sample
INF|2018-04-08 14:47:44|device.c|iot_device_info_init(37): device info init success!
INF|2018-04-08 14:47:44|device.c|iot_device_info_set(42): start to set device info!
INF|2018-04-08 14:47:44|device.c|iot_device_info_set(66): device info set successfully!
FUNC_ENTRY: qcloud_iot_mqtt_init L#172
DBG|2018-04-08 14:47:44|mqtt_client.c|qcloud_iot_mqtt_init(177): product_id: KI640JN35M
DBG|2018-04-08 14:47:44|mqtt_client.c|qcloud_iot_mqtt_init(178): device_name: switch01
FUNC_EXIT: qcloud_iot_mqtt_init L#295 Return Code : 0
FUNC_ENTRY: qcloud_iot_mqtt_connect L#369
FUNC_ENTRY: get_client_conn_state L#1307
FUNC_EXIT: get_client_conn_state L#1312 Return Code : 0
FUNC_ENTRY: _mqtt_connect L#299
DBG|2018-04-08 14:47:44|HAL_TLS_mbedtls.c|HAL_TLS_Connect(203): Connecting to /iotcloud-mqtt.gz.tencentdevices.com/8883...
DBG|2018-04-08 14:47:44|HAL_TLS_mbedtls.c|HAL_TLS_Connect(208): Setting up the SSL/TLS structure...
DBG|2018-04-08 14:47:44|HAL_TLS_mbedtls.c|HAL_TLS_Connect(250): Performing the SSL/TLS handshake...
ERR|2018-04-08 14:47:45|HAL_TLS_mbedtls.c|HAL_TLS_Connect(253): mbedtls_ssl_handshake failed returned 0x7780
FUNC_EXIT: _mqtt_connect L#322 Return Code : -1001
DBG|2018-04-08 14:47:45|HAL_TLS_mbedtls.c|HAL_TLS_Disconnect(277): handle is NULL
FUNC_EXIT: qcloud_iot_mqtt_connect L#386 Return Code : -1001
ERR|2018-04-08 14:47:45|mqtt_client.c|IOT_MQTT_Construct(90): mqtt connect with id: failed: -1001
ERR|2018-04-08 14:47:45|mqtt_sample.c|main(256): Cloud Device Construct Failed
@i3water
你运行的是mqtt_sample.c是吗?请问一下你的QCLOUD_IOT_PSK
填写内容是什么呢?
运行的 ~/下载/qcloud-iot-sdk-embedded-c-master/output/release/bin$ ./mqtt_sample
#ifdef ASYMC_ENCRYPTION_ENABLED
/* 客户端证书文件名 非对称加密使用*/
#define QCLOUD_IOT_CERT_FILENAME "switch01_cert.crt"
/* 客户端私钥文件名 非对称加密使用*/
#define QCLOUD_IOT_KEY_FILENAME "switch01_private.key"
static char sg_cert_file[PATH + 1]; //客户端证书全路径
static char sg_key_file[PATH + 1]; //客户端密钥全路径
#else
#define QCLOUD_IOT_PSK "k1CIyegaDZBDGbU9mbiQyw=="
#endif
@i3water
你好,初步排查发现你填写的psk不正确。
我们这边查到设备的psk应该是v7+w85gmCwTbfxyQE1RHkw==
,请确认一下是否psk是否与使用的设备正确对应。
嗯嗯,谢谢,确实是我填错了,我修改后连上了。
我希望移植到mcu上,由于ram有限,只能使用对称加密。我已经成功让mcu连上MQTT,我看了下c sdk
中建立ssl时使用了psk。
memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH);
qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->psk, src_len );
pClient->network_stack.ssl_connect_params.psk = (char *)sg_psk_str;
pClient->network_stack.ssl_connect_params.psk_length = len;
目前遇到问题,我在mcu的MQTT连接时并没有使用到psk,我尝试在未使用psk时发布消息,出现了错误
[KI640JN35M][switch01][ProcessPublish][failed]KI640JN35Mswitch01;12010126;12345KI640JN35M/switch01/event,no authority
而c sdk的使用psk后为
[KI640JN35M][switch01][MESSAGE][SUCC]action: try push to subscribers|topic:KI640JN35M/switch01/event
我稍后尝试ssl连接时加入psk。
@i3water 目前C-SDK移植的相关操作需要用户自行针对平台对HAL层进行移植 文档参考:https://cloud.tencent.com/document/product/634/12515
另外,你提供的错误:
[KI640JN35M][switch01][ProcessPublish][failed]KI640JN35Mswitch01;12010126;12345KI640JN35M/switch01/event,no authority
上面 topic 的格式和腾讯云IoT的 topic 格式要求存在不同,这里需要注意的是,目前腾讯云使用的MQTT是在标准的MQTT协议基础上根据腾讯云的特性做了相关的修改,具体可参考官网文档。 换句话说,直接用其他的mqtt客户端是不能直接连接到腾讯云IoT的。
@chipengliu
你好,前一个问题中我提到
目前遇到问题,我在mcu的MQTT连接时并没有使用到psk,我尝试在未使用psk时发布消息,出现了错误
后来我检查到是我移植的代码中 topic
生成错了,修改topic后已经测试可以成功发布和订阅消息。
但是遇到一个问题,我使用对称加密方式时并没有使用到 psk
,但是同时mcu端是用 ssl
进行通信的。
我发现 c-sdk
源码中有如下代码:
/* 后台重构版本不需要填写密码,这里置位0
if (options->password != NULL) {
flags.bits.password = 1;
} else {
flags.bits.password = 0;
}
*/
我测试时建立了两个不同的产品,一个为对称加密,一个为非对称加密。
问题:
1.我在使用对称加密时忘记设置 FEATURE_ASYMC_ENCRYPTION_ENABLED = n
,于是sdk使用了非对称加密产品的证书让我对称加密的设备成功上线并成功发布/订阅消息。
2.对称加密设备暂时我并没有使用 psk
即可成功上线并成功发布/订阅消息。没有 password
或类似的对设备登陆进行鉴权,请问后期会考虑将 psk
作为 password
进行登陆鉴权用吗?
非对称加密可以登陆对称加密设备,对称加密时我仅需知道 productId
和 deviceName
即可登陆该产品下的任何设备。
问题1中提到的证书登陆log如下:
./mqtt_sample
INF|2018-04-11 15:55:08|device.c|iot_device_info_init(37): device info init success!
INF|2018-04-11 15:55:08|device.c|iot_device_info_set(42): start to set device info!
INF|2018-04-11 15:55:08|device.c|iot_device_info_set(66): device info set successfully!
FUNC_ENTRY: qcloud_iot_mqtt_init L#174
DBG|2018-04-11 15:55:08|mqtt_client.c|qcloud_iot_mqtt_init(179): product_id: KI640JN35M
DBG|2018-04-11 15:55:08|mqtt_client.c|qcloud_iot_mqtt_init(180): device_name: switch01
DBG|2018-04-11 15:55:08|mqtt_client.c|qcloud_iot_mqtt_init(253): cert file: /home/i3water/下载/qcloud-iot-sdk-embedded-c-master/output/release/bin/certs/switch01_cert.crt
DBG|2018-04-11 15:55:08|mqtt_client.c|qcloud_iot_mqtt_init(254): key file: /home/i3water/下载/qcloud-iot-sdk-embedded-c-master/output/release/bin/certs/switch01_private.key
FUNC_EXIT: qcloud_iot_mqtt_init L#297 Return Code : 0
FUNC_ENTRY: qcloud_iot_mqtt_connect L#384
FUNC_ENTRY: get_client_conn_state L#1315
FUNC_EXIT: get_client_conn_state L#1320 Return Code : 0
FUNC_ENTRY: _mqtt_connect L#307
DBG|2018-04-11 15:55:08|HAL_TLS_mbedtls.c|HAL_TLS_Connect(203): Connecting to /iotcloud-mqtt.gz.tencentdevices.com/8883...
DBG|2018-04-11 15:55:08|HAL_TLS_mbedtls.c|HAL_TLS_Connect(208): Setting up the SSL/TLS structure...
DBG|2018-04-11 15:55:08|HAL_TLS_mbedtls.c|HAL_TLS_Connect(250): Performing the SSL/TLS handshake...
FUNC_ENTRY: _serialize_connect_packet L#125
FUNC_ENTRY: mqtt_write_packet_rem_len L#96
FUNC_EXIT: mqtt_write_packet_rem_len L#111 Return Code : 1
FUNC_EXIT: _serialize_connect_packet L#217 Return Code : 0
FUNC_ENTRY: send_mqtt_packet L#511
FUNC_EXIT: send_mqtt_packet L#535 Return Code : 0
FUNC_ENTRY: wait_for_read L#1284
FUNC_ENTRY: cycle_for_read L#1229
FUNC_ENTRY: _read_mqtt_packet L#607
FUNC_ENTRY: _decode_packet_rem_len_with_net_read L#560
FUNC_EXIT: _decode_packet_rem_len_with_net_read L#591 Return Code : 0
FUNC_ENTRY: mqtt_write_packet_rem_len L#96
FUNC_EXIT: mqtt_write_packet_rem_len L#111 Return Code : 1
FUNC_EXIT: _read_mqtt_packet L#676 Return Code : 0
FUNC_EXIT: cycle_for_read L#1280 Return Code : 0
FUNC_EXIT: wait_for_read L#1305 Return Code : 0
FUNC_ENTRY: _deserialize_connack_packet L#229
FUNC_ENTRY: _decode_packet_rem_len_from_buf_read L#139
FUNC_EXIT: _decode_packet_rem_len_from_buf_read L#161 Return Code : 0
FUNC_EXIT: _deserialize_connack_packet L#295 Return Code : 0
FUNC_EXIT: _mqtt_connect L#379 Return Code : 0
FUNC_EXIT: qcloud_iot_mqtt_connect L#401 Return Code : 0
INF|2018-04-11 15:55:09|mqtt_client.c|IOT_MQTT_Construct(95): mqtt connect with id: 9mnBd success
对称加密产品 product_id: KI640JN35M
非对称加密产品 product_id: NZVDH1QW3I
盼复,谢谢!
@i3water 你好,方便的话请提供一下联系方式以便了解你的问题细节,谢谢。
QQ 121024123 email 121024123@qq.com / liudingyang@mostfun.com
@i3water qq已经申请需要回复问题,貌似无法添加
目前有个疑问是
KI640JN35M/switch01这个设备在控制台创建
的时候是选择使用非对称加密
还是对称加密
按readme 配置后运行报错
非对称加密
请问错误码在哪查询?
对称加密