独立使用,实现数据安全上云

更新时间: 2024-01-24 14:52:08

iotid

手动配置

55

教程简介

在本教程中将在物联网应用中集成云端SDK、在物联网设备(Linux)中集成设备端SDK,通过身份认证、业务数据加密等功能,实现物联网数据安全上云。

image..png

前提条件

  • 阿里云ECS模拟设备。

  • IoT设备管理平台。

  • 具备设备端SDK和云端SDK集成能力,我们提供了演示示例供参考和快速集成

  • 阿里云账号的AccessKey。请参考获取AccessKey

我能学到什么

  • 集成IoT设备身份认证设备端SDK、云端SDK,实现设备(Linux) 到云端物联网应用的业务数据安全。

  • 在设备(Linux)上集成IoT设备身份认证设备端SDK。

  • 在业务应用中集成IoT设备身份认证云端SDK。

  • 使用IoT设备身份认证将物联网设备安全的接入到IoT设备管理平台。

  • 使用IoT设备身份认证对业务数据进行加密。

操作难度

所需时间

55分钟

使用的阿里云产品

所需费用

0元

准备环境和资源

10

开始教程前请按以下步骤准备环境和资源:

  1. 访问阿里云免费试用。单击页面右上方的登录/注册按钮,并根据页面提示完成账号登录(已有阿里云账号)、账号注册(尚无阿里云账号)或实名认证(根据试用产品要求完成个人实名认证或企业实名认证)。

  2. 准备云端的环境。

    • 方式1:使用IoT设备管理平台和物联网应用,需要应用开发和集成权限。

    • 方式2:使用阿里云ECS模拟云端环境运行云端演示示例。查看完整的操作说明

  3. 准备物联网设备。

    • 方式1:使用物联网设备,需满足下列要求。

      • CPU架构:x86_64

      • 操作系统:CentOS 7.6 ~ 7.9、CentOS 8.0 ~ 8.3、Ubuntu 16.04 ~ 22.04

      • 系统可用RAM:不低于100K

      • 系统可用ROM:不低于300K

      • 磁盘数据存储分区:不低于100K

      • C语言开发环境:Linux GCC 5.4.0+

    • 方式2:使用阿里云ECS模拟设备。

      • 复用上一步的阿里云ECS环境。

    • 方式3:使用虚拟机模拟设备。查看完整的操作说明

      • 下载并安装虚拟机应用,比如VMware

      • 下载Ubuntu镜像,适用于Windows、Linux、macOS(Mac x86_64)。

      • 启动虚拟机软件,单击打开虚拟机,选择上一步解压的文件Ubuntu-20.04/Ubuntu-20.04.vmx

      • 启动Ubuntu-20.04虚拟机并登录(用户名:aliyuniot、密码:aliyun1234)。

  4. 访问阿里云免费试用。在产品类别下选择IoT设备身份认证,单击立即试用

  5. 在弹出的规格确认面板中,勾选同意协议后,单击立即试用

  6. 开通成功后,单击前往产品控制台进入产品控制台,在顶部的信息提示中可以看到免费试用的额度和到期时间。

说明

使用过程中有任何问题或建议,请通过钉钉联系我们。

创建产品

5

本章节描述了如何在IoT设备身份认证控制台创建产品并分配授权额度,包括:

  • 创建产品

  • 分配授权额度

  1. 登录产品控制台,在左侧导航栏,选择常规>集成与部署 > IoT设备身份认证,单击独立使用(三方物联网平台)卡片的开始接入按钮。

    image.png

  2. 配置产品页面创建新产品&分配ID²授权,然后单击下一步按钮。

    • 选择产品:请选择创建新产品,并输入产品名称。

    • ID²有效期:请选择免费试用

    • 分配ID²授权数量:请输入ID²授权数量,最小值为1,最大值为1000。

    image.png

  3. 查看配置信息页面选择设备认证算法SM4-128,单击提交按钮。

    image.png

  4. 查看配置信息页面您需要记录下ProductKey、ProductSecret

    • ProductKey:设备所属产品的ProductKey。

    • ProductSecret:由IoT设备身份认证颁发的产品密钥,与 ProductKey 成对出现。

  5. 单击下一步按钮进入集成云端SDK页面。

    image.png

说明

使用过程中有任何问题或建议,请通过钉钉联系我们。

集成云端SDK

10

本章节描述了如何在IoT设备管理平台集成云端SDK,包括:

  • 前提条件

  • 下载云端SDK

  • 集成云端SDK

  • 使用演示示例

前提条件

  • 阿里云账号的AccessKey。请参考获取AccessKey

  • 物联网应用或云端演示示例。

    • 方式1:使用自有的物联网应用,需要具备应用开发与集成权限。本教程以Java应用开发为例。

    • 方式2:使用云端演示示例程序,在云端环境执行命令sudo apt install openjdk-17-jre-headless安装JDK 7及以上的环境。

下载云端SDK

  1. 在服务端执行wget命令获取云端SDK。

    wget https://id2-schip-online.oss-cn-shanghai.aliyuncs.com/static_resources/id2_server_sdk/ID2_Server_SDK.tar
  2. 在云端环境执行命令tar -xvf ID2_Server_SDK.tar 完成解压,执行命令cd <解压SDK后的目录>。云端SDK的目录说明见表格内容:

目录/文件

说明

demos

ID²云端的示例代码

lib

ID²云端的Jar包

集成云端SDK

建议您按照1-3集成云端SDK并在应用中进行调试,如果您想快速体验可以使用演示示例。

  1. 添加Maven项目依赖,引入阿里云Java SDK公共包。

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.5.6</version>
    </dependency>
  2. 导入云端SDK中的lib/aliyun-java-sdk-id2-1.1.4.jar到项目工程中,初始化云端SDK。

    public static String ACCESS_KEY = null;
    public static String ACCESS_SECRET = null;
    
    public static String REGION_ID = "cn-shanghai";
    public static String END_POINT = "id2." + REGION_ID + ".aliyuncs.com";
    
    // Load ACCESS_KEY and ACCESS_SECRET From Config File
    loadConfigProperties("xxx.conf");
    
    IClientProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY, ACCESS_SECRET);
    DefaultProfile.addEndpoint(REGION_ID, PRODUCT_CODE, END_POINT);
    client = new DefaultAcsClient(profile);
  3. 发起调用,ID²云端SDK为每个API封装了一个类,命名为${API名称}+"Request",如VerifyRequest,用于API的调用请求,ID²云端API列表请参考ID²云端API手册

    1. ID²空发

      OtpGetId2Request request = new OtpGetId2Request();
      request.setDeviceAuthCode(authCode);
      request.setApiVersion(1.1.2);
      
      OtpGetId2Response response = client.getAcsResponse(request);
    2. 获取ID²认证挑战字

      GetServerRandomRequest request = new GetServerRandomRequest();
      request.setId2(id2Id);
      request.setApiVersion(1.1.2);
      
      GetServerRandomResponse response = client.getAcsResponse(request);
      System.out.println("GetServerRadom requestId:" + response.getRequestId());
    3. ID²设备认证和业务密钥加密

      VerifyAndEncryptRequest request = new VerifyAndEncryptRequest();
      request.setApiVersion(1.1.2);
      request.setProductKey(productKey);
      request.setId2(id2Id);
      request.setAuthCode(authCode);
      request.setData(keyInfo);
      
      VerifyAndEncryptResponse response = client.getAcsResponse(request);
      System.out.println("VerifyAndEncrypt requestId:" + response.getRequestId());

使用演示示例

演示示例描述了如何在Ubuntu 22.04上通过Docker部署EMQX物联网平台的示例。

  1. 部署EMQX物联网平台,详情参见EMQX安装和部署

    安装和启动Docker工具。

    # Install Docker
    curl -fsSL get.docker.com -o get-docker.sh
    sudo sh get-docker.sh --mirror Aliyun
    
    # Start Docker
    sudo systemctl enable docker
    sudo systemctl start docker
    
    # Get Docker Version
    docker -v
  2. 使用Docker安装EMQX物联网平台。

    # Get emqx-5.1.3 docker image
    docker pull emqx/emqx:5.1.3
    
    # Start docker emqx instance
    docker run -d --name emqx -p 1883:1883 emqx/emqx:5.1.3
    
    # Get docker instance info
    docker ps
  3. 部署云端演示示例,配置vi demos/ID2SPDemo/Id2SpDemo.conf文件中的信息。

    • AccessKey:阿里云账户的AccessKey ID

    • AccessSecret:阿里云账户的AccessKey Secret

    • RegionId:ID²认证服务的region区域,试用时选择“cn-shanghai”

    • ClientId:自定义的标识,同个账户下唯一

    • BrokerAddr:EMQX物联网平台的地址,localhost代表本机网络

    image.png

  4. 执行命令cd demos/ID2SPDemo,执行命令java -jar Id2SpDemo.jar启动云端演示示例。

    image.png

下一步

完成以上操作后,在集成云端SDK页面,单击下一步按钮,进入集成设备端SDK页面。

说明

使用过程中有任何问题或建议,请通过钉钉联系我们。

集成设备端SDK

10

本章节描述了如何在设备端集成设备端SDK,包括:

  • 前提条件

  • 下载设备端SDK

  • 集成设备端SDK

  • 使用演示示例

前提条件

  • 阿里云ECS模拟设备。

  • 具有sudo权限。

  • 设备可以访问互联网。

下载设备端SDK

  1. 在阿里云ECS的命令行终端窗口,单击右上角+号,打开新的命令行终端窗口作为设备端。

    image.png

  2. 在设备端执行wget命令获取设备端SDK。

    https://id2-schip-online.oss-cn-shanghai.aliyuncs.com/static_resources/id2_client_sdk/ID2_Client_SDK.tar
  3. 在设备端中执行命令tar -xvf ID2_Client_SDK.tar完成解压,执行命令cd <解压SDK后的目录>。设备端SDK的目录说明见表格内容:

    目录/文件

    说明

    demos

    ID²设备端的示例代码:

    • lpdemo:提供通过MQTT组件使用ID²连接到阿里云物联网平台的演示示例。

      • lk:基于阿里云物联网的Link SDK 的示例代码。

      • paho:基于Paho MQTT开源组件的示例代码。

    • spdemo:提供独立使用ID²的演示示例

    external

    用于存放外部的组件:

    • mqtt - MQTT的组件

      • lk:阿里云物联网平台提供的Link SDK。

      • paho:Eclipse Paho mqtt embdded-c SDK。

    include

    ID²的头文件目录。

    libs

    ID²的静态库。

    make.rules

    编译规则文件,可配置编译工具链和编译参数。

    make.settings

    编译配置文件,可配置ID²的密钥类型(如AES、SM4)。

    makefile

    编译脚本。

    src

    ID²的源码目录。

    tests

    ID²的测试用例,包括HAL和ID²的测试。

    tools

    ID²的本地工具/脚本:

    • ls_lp_demo.sh:与阿里云物联网平台组合使用场景中的设备端演示示例。

    • ls_sp_demo.sh:独立使用场景中的设备端演示示例

集成设备端SDK

建议您按照使用自有的应用的说明编译设备端SDK并在应用中进行调试,如果您想快速体验可以选择使用演示示例的方式。

使用自有的应用

  1. 设备硬件及系统层集成,详情请参考ID²设备端SDK适配接口,包括:

    1. OSA接口适配:实现src/osa/ls_osa.c中的接口。

    2. HAL接口适配:实现src/hal/km/demo/ls_hal_km.c中的接口,通过hal_test测试用例验证(成功日志:“HAL KM Test Pass”)。

  2. 设备应用层集成,详情请参考ID²设备端API手册

    1. 设备应用首先调用ID²的初始化函数,完成设备端SDK的初始化。

      {
          int ret;
      
           ret = id2_client_init();
           if (ret != IROT_SUCCESS) {
              ls_osa_print("id2 client init fail, %d\n", ret);
              return -1;
           }
      }
    2. 获取ID²设备端的烧录状态:

      • 如ID²已烧录(is_prov == true),退出ID²空发流程

      {
          int ret = 0;
          bool is_prov = false;
      
          ret = id2_client_get_prov_stat(&is_prov);
          if (ret != IROT_SUCCESS) {
              ls_osa_print("id2 client get prov stat fail, %d\n", ret);
              return -1;
          } 
      }
    3. 生成ID²设备端的空发认证码。

      {
          int ret = 0;
          uint8_t auth_code[ID2_MAX_AUTH_CODE_LEN] = {0};
          uint32_t auth_code_len = ID2_MAX_AUTH_CODE_LEN;
      
          ret = id2_client_get_otp_auth_code(
                    (uint8_t *)product_secret, (int)strlen(product_secret),
                     auth_code, &auth_code_len);
          if (ret != IROT_SUCCESS) {
              ls_osa_print("id2_client_get_otp_auth_code fail, %d\n", ret);
              return -1;
          }
      }
    4. ID²空发的网络请求和响应。

      • authCode:ID²空发认证码的Base64编码

      • otpData:ID²云端下发的空发数据(Base64格式)

      # ID²空发请求:
      {commandId:xxx, authCode: xxx}
      
      # ID2空发响应:
      {commandId:xxx, otpData: xxx}
    5. 存储ID²密钥到设备安全存储区。

      {
          int ret = 0;
      
          ret = id2_client_load_otp_data(otp_data, otp_len);
          if (ret != IROT_SUCCESS) {
              ls_osa_print("id2 load otp data fail, %d\n", ret);
              return -1;
          }
      }
    6. 获取设备端的ID² ID。

      {
          int ret = 0;
          uint8_t id2_id[ID2_ID_MAX_LEN + 1] = {0};
          uint32_t id2_id_len = ID2_ID_MAX_LEN;
      
          ret = id2_client_get_id(id2_id, &id2_id_len);
          if (ret != IROT_SUCCESS) {
              ls_osa_print("id2 client get id fail, %d\n", ret);
              return -1;
          }
      }
    7. ID²认证挑战字的网络请求和响应。

      # ID²认证挑战字的请求:
      {commandId:xxx, Id2Id: xxx}
      
      # ID2认证挑战字的响应:
      {commandId:xxx, challenge: xxx}
    8. 获取设备端的ID²认证码。

      {
          int ret = 0;
          uint8_t auth_code[ID2_MAX_AUTH_CODE_LEN] = {0};
          uint32_t auth_code_len = ID2_MAX_AUTH_CODE_LEN;
      
          ret = id2_client_get_challenge_auth_code(
                    challenge, NULL, 0, auth_code, &auth_code_len);
          if (ret != IROT_SUCCESS) {
              ls_osa_print("id2 client get challenge auth code fail, %d\n", ret);
              return -1;
          }
      }
    9. 设备端认证和数据加密的网络请求和响应。

      • cipherData:ID²云端下发的加密数据。

      # ID²设备认证和数据加密的请求:
      {commandId:xxx, productKey:xxx, Id2Id:xxx, authCode:xxx}
      
      # ID2设备认证和数据加密的响应:
      {commandId:xxx, cipherData: xxx}
    10. 解密ID²云端加密下发的数据。

      {
          int ret = 0;
      
          ret = id2_client_decrypt(cipher_data, cipher_len, cipher_data, &cipher_len);
          if (ret != IROT_SUCCESS) {
              ls_osa_print("id2 client decrypt fail\n");
              return -1;
          }
      }

使用演示示例

  1. 执行命令vi ./make.settings打开文件, 修改CONFIG_LS_ID2_KEY_TYPE的值为SM4。

    image..png

  2. 执行命令make clean & make进行编译。

    image..png

说明

使用过程中有任何问题或建议,请通过钉钉联系我们。

业务数据加密

10

本章介绍了集成云端SDK和设备端SDK后,如何通IoT设备身份认证实现设备到物联网应用端到端的数据加密。

前提条件

  • 完成云端SDK集成。

  • 完成设备端SDK集成。

业务数据加密

  1. 运行设备端的应用。

  2. 使用演示示例:

    1. 在设备端执行命令vi tools/ls_sp_demo.sh填写如下参数:

      • HostAddr:云端演示示例的IP地址,localhost代表本机网络。

      • ProductKey:ID²产品的ProductKey。

      • ProductSecret:ID²产品的ProductSecret。

      • PublishData:设备端应用上报的业务数据,建议不超过1024字节。

      image..png

    2. 执行命令./tools/ls_sp_demo.sh运行设备端演示示例,查看设备端打印的日志。

      • 在设备端日志中,可以看到完成ID²的设备认证,以及通过ID²加密下发SP Key Info;设备端通过ID²设备端接口解密后,获得明文的Key ID和Data

      • 在设备端日志中,可看到由SPKey加密下发的业务数据(“SP Server Subscribed Cipher Data”);通过在调用SPKey解密后,可得到明文的下行业务数据(“SP_Server_Hello”)

      image.png

    3. 在云端查看打印的日志。

      • 可看到由SPKey加密的业务数据("Device Published Cipher Data");

      • 使用SPKey解密后,可得到正确的上行业务数据(“SP_Client_Hello”)。

      image.png

说明

使用过程中有任何问题或建议,请通过钉钉联系我们。

完成

5

登录产品控制台,在左侧导航栏,选择常规>资产>设备资产,查看设备状态为正常,安全状态为安全。

image.png

清理及后续

5

清理

  1. ECS提供的试用实例有按量付费实例和包年包月实例。请在阿里云免费试用确认您试用的实例类型,并参考以下规则清理:

    • 如果无需继续使用实例,可以登录ECS控制台,找到目标实例,在操作列单击更多的图标,搜索并单击释放设置,根据界面提示释放实例。

    • 如果需要继续使用实例,请至少在试用到期1小时前为阿里云账号充值,确保账户金额不小于100.00元人民币。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。

    • 包年包月实例到期会自动释放,释放实例的同时释放数据。

    • 如果需要继续使用实例,请在试用到期前及时续费。到期未续费的实例会因欠费而被自动停机,停机15天内实例将保留,15天后实例和数据都将被自动释放。

  2. IoT设备身份认证提供的“免费试用”活动有效期为1个月,到期后IoT设备身份认证将自动停机。停机15天内数据保留,15天后数据将被自动释放。

    如果您不再使用IoT设备身份认证,可通过擦除ID²存储目录中的.dev_key文件,来清除设备的ID²。

    如果您需要继续使用IoT设备身份认证,请在试用到期前及时购买ID²授权并开启自动续期。

    • 您可以单击立即购买获取IoT设备身份认证的授权。详情请查看计费说明

    • 登录产品控制台,在授权页面,单击IoT设备身份认证-自动续期策略自定义按钮,选择您需要继续使用的产品,打开自动续期的开关。

后续

您可以对接入的设备进行身份认证、对业务数据进行加密,保障物联网数据的安全性。

总结

常用知识点

问题 1:IoT 设备身份认证可以搭配哪些系统一起使用?

  • 既可以与阿里云物联网平台组合使用,也支持独立使用。

  • 只支持与阿里云物联网平台组合使用。

  • 只支持独立使用。

正确答案是“即可以与阿里云物联网平台组合使用,也支持独立使用。”,支持物联网平台的类型:公共实例、企业实例-基础版、企业实例-尊享版。

问题 2:IoT 设备身份认证设备端SDK支持哪类操作系统?

  • Linux、Android、RTOS

  • 仅 Linux

  • 仅 Android

正确答案是“Linux、Android、RTOS”,包括 Linux 发行版(CentOS 7.6~7.9、CentOS 8.0~8.3、Ubuntu 16.04~22.04),Android 系统(v8.1、v9、v10、v11)以及RTOS。

问题 3:IoT设备身份认证支持哪些加密算法?

  • 国际算法

  • 国际算法和国密算法

正确答案是“国际算法和国密算法”,包括国际算法(AES-128、AES-192、AES-256)、国密算法(SM1-128、SM2-256、SM4-128)。

问题 4:物联网应用是否必须在阿里云才能使用IoT设备身份认证?

  • 不是

正确答案“不是”,物联网应用在多云环境中也可以使用IoT设备身份认证。

问题 5:IoT设备身份认证免费试用到期后,数据保留多长时间?

  • 7天

  • 15天

  • 30天

正确答案是“15天”,超过15天未购买数据会自动清空。

问题 6:付费后,每个设备的ID²到期时间是否一样?

  • 一样

  • 不一样

正确答案是“不一样”。付费后,每个设备的ID²到期时间单独计算,到期时间 = 首次上线时间+授权有效期。详情请查看计费说明

延伸阅读

  • 常见问题以及处理方案,请查看常见问题

  • 使用虚拟机模拟物联网设备,请查看最佳实践

  • 在实际业务环境中使用ID²的最佳实践,请查看最佳实践

  • 在Android、RTOS设备中使用IoT设备身份认证,请查看最佳实践

  • IoT设备身份认证的计量计费规则说明,请查看计费说明

阿里云首页 相关技术圈