前置条件
物联网平台
- 在物联网平台创建新产品(普通产品),认证方式选用“秘钥认证”。
- 在产品设置中打开动态注册配置开关,并允许自动创建设备。
- 记录产品ID和产品秘钥(ProductID/ProductSecret)。
设备端
- 命名设备的唯一标识(如设备MAC、IMEI号、芯片ID等)即DeviceName。
- 将物联网平台获取的产品ID和产品秘钥烧录至设备中。
注册流程
第一步:生成验签参数
1 2 3 4
| deviceName: nonce: productId: timestamp:
|
拼接字符串“deviceName=%s&nonce=%d&productId=%s×tamp=%d”,使用HMAC_SHA1算法,ProductSecret作为Key对字符串进行摘要,然后使用Base64编码该摘要获得验签参数(Signature)的值
第二步:封装请求参数并发送鉴权请求
拼接JSON格式的字符串为Body:
1 2 3 4 5 6 7 8
|
{\"deviceName\":\"%s\",\"nonce\":%d,\"productId\":\"%s\",\"timestamp\":%d,\"signature\":\"%s\"}
Accept: text/xml,application/json;*/* Content-type: application/x-www-form-urlencoded Content-Length: 实际的Body长度
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # CA证书内容如下: -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIJALM1winYO2xzMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV BAYTAkNOMRIwEAYDVQQIDAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMRAw DgYDVQQKDAdUZW5jZW50MRcwFQYDVQQLDA5UZW5jZW50IElvdGh1YjEYMBYGA1UE AwwPd3d3LnRlbmNlbnQuY29tMB4XDTE3MTEyNzA0MjA1OVoXDTMyMTEyMzA0MjA1 OVoweTELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUd1YW5nRG9uZzERMA8GA1UEBwwI U2hlblpoZW4xEDAOBgNVBAoMB1RlbmNlbnQxFzAVBgNVBAsMDlRlbmNlbnQgSW90 aHViMRgwFgYDVQQDDA93d3cudGVuY2VudC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQDVxwDZRVkU5WexneBEkdaKs4ehgQbzpbufrWo5Lb5gJ3i0 eukbOB81yAaavb23oiNta4gmMTq2F6/hAFsRv4J2bdTs5SxwEYbiYU1teGHuUQHO iQsZCdNTJgcikga9JYKWcBjFEnAxKycNsmqsq4AJ0CEyZbo//IYX3czEQtYWHjp7 FJOlPPd1idKtFMVNG6LGXEwS/TPElE+grYOxwB7Anx3iC5ZpE5lo5tTioFTHzqbT qTN7rbFZRytAPk/JXMTLgO55fldm4JZTP3GQsPzwIh4wNNKhi4yWG1o2u3hAnZDv UVFV7al2zFdOfuu0KMzuLzrWrK16SPadRDd9eT17AgMBAAGjUDBOMB0GA1UdDgQW BBQrr48jv4FxdKs3r0BkmJO7zH4ALzAfBgNVHSMEGDAWgBQrr48jv4FxdKs3r0Bk mJO7zH4ALzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDRSjXnBc3T d9VmtTCuALXrQELY8KtM+cXYYNgtodHsxmrRMpJofsPGiqPfb82klvswpXxPK8Xx SuUUo74Fo+AEyJxMrRKlbJvlEtnpSilKmG6rO9+bFq3nbeOAfat4lPl0DIscWUx3 ajXtvMCcSwTlF8rPgXbOaSXZidRYNqSyUjC2Q4m93Cv+KlyB+FgOke8x4aKAkf5p XR8i1BN1OiMTIRYhGSfeZbVRq5kTdvtahiWFZu9DGO+hxDZObYGIxGHWPftrhBKz RT16Amn780rQLWojr70q7o7QP5tO0wDPfCdFSc6CQFq/ngOzYag0kJ2F+O5U6+kS QVrcRBDxzx/G -----END CERTIFICATE-----
|
第三步:根据响应结果进一步处理和解密payload
响应结果格式:
1
| {"code":0,"message":"","len":53,"payload":"+b93hoyyPKdArkNo+FIwCJXYQi+zVppqBGM+1kWuMxgHbfknWh2udKorHnb4t9RywJM8g23ryT/sTL1rmGGTyA=="}
|
其中,code为0表示鉴权成功,message为错误时的提示信息,payload为返回的注册结果密文,len为payload的明文长度。
解密步骤:
解密后的字符串长度应该为16的整数倍,需要将字符串尾部多余的0字节去除(或者直接截取字符串的前len个字节)得到一个最终json串,格式为:
1
| {"encryptionType":2,"psk":"MpKyD0rDNaAwq+zsDvGY9w=="}
|
其中,encryptionType表示认证类型(1证书,2秘钥),psk表示秘钥。
第四步:将秘钥烧录到设备
将psk烧录到设备中存储,对应的内容应该是一个3元组或4元组:
1 2 3 4
| productId: productSecret: deviceName: deviceSecret:
|
第五步:设备认证+上线
此处参照文档:腾讯云物联网通信文档中心-设备接入-设备基于MQTT接入