与阿里云物联网平台组合使用,实现数据安全上云

更新时间: 2023-11-13 14:44:16

iotid

手动配置

50

教程简介

在本教程中将在设备(Linux)中集成IoT设备身份认证设备端SDK并接入阿里云物联网平台,通过身份认证、通道加密等功能,实现物联网数据安全上云。

image..png

前提条件

  • 模拟设备或者物联网设备。

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

我能学到什么

  • 集成IoT设备身份认证设备端SDK,实现设备(Linux) 到阿里云物联网平台的安全接入。

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

操作难度

所需时间

50分钟

使用的阿里云产品

所需费用

0元

准备环境和资源

10

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

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

  2. 准备华东2(上海)region的阿里云物联网平台实例(类型为公共实例、企业版实例-标准型、企业版实例-尊享型的实例)。可以使用已有的实例,或者访问阿里云免费试用申请免费试用、通过物联网平台页面购买。

    说明

    请确保您拥有的物联网平台实例剩余有效期≥31天。如果物联网平台实例到期,那么会导致您无法继续试用IoT设备身份认证;您需要为实例续费后,才可以继续使用IoT设备身份认证。

    例如,您在2023年6月15日申请了IoT设备身份认证的免费试用,而您的物联网平台将在2023年6月20日到期,将导致您在2023年6月20日之后无法试用IoT设备身份认证。此时您需要为物联网平台续费才能继续试用IoT设备身份认证。

  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模拟设备。查看完整的操作说明

    • 方式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

只有认证方式为ID²的产品才可以使用IoT设备身份认证的服务,接下来我们需要创建一个新的产品并指定认证方式为ID²。

前提条件

  • 拥有阿里云物联网平台实例(华东2上海region)。

  • 完成IoT设备身份认证免费试用申请。

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

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

    • 请选择新增产品,并输入产品名称。

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

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

    image.png
    说明

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

选择设备认证算法

5

IoT设备身份认证支持国际算法(AES-128、AES-192、AES-256)和国密算法(SM1-128、SM2-256、SM4-128),能满足企业不同安全等级的需求。本教程中我们选择国密算法SM4-128用于身份认证和通道加密的加密算法。

说明

国密算法SM1-128需要配合ID²安全芯片使用,SM2-256用于业务数据完整性校验和加密。

选择设备认证算法:SM4-128

  1. 获取配置信息页面,单击设备认证算法后的更换按钮,查看支持的密钥类型。在此教程中,我们选择加密算法SM4-128,并确认。

    image.png
  2. 获取配置信息页面,您需要记录下实例ID、ProductKey、ProductSecret

    • 实例ID:阿里云物联网平台的实例标识。企业实例ID是字符串,公共实例ID是符号“-”。

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

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

  3. 单击下一步按钮进入集成设备端SDK页面。

    image.png
说明

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

集成设备端SDK

5

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

  • 前提条件

  • 下载设备端SDK

  • 集成设备端SDK

  • 使用演示示例

前提条件

  • 模拟设备或者物联网设备

  • 设备可以访问互联网。

下载设备端SDK

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

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

    目录/文件

    说明

    demos

    ID²设备端的示例代码:

    • mqtt:提供不同MQTT组件(如lk_4.x)+ ID²连接阿里云物联网平台的演示示例。

      • lk_4.x:提供针对LinkSDK v4.x的示例代码。

      • 其他组件:提供基于其他MQTT组件的示例代码。

    external

    用于存放外部的组件:

    • mqtt - MQTT的外部组件

      • lk_4.x:阿里云物联网平台提供的LinkSDK。

      • 其他组件:添加其他的MQTT组件,并修改makefile指向此组件。

    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

建议您按照1-3集成设备端SDK,如果您想快速体验可以使用演示示例。

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

    1. OSA接口适配:实现src/osa/ls_osa.c中的接口,参考目录下__DEMO__的实现。

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

  2. 设备连接通道层集成

    1. 使用默认的Link SDK v1.4.x,请跳过此步骤。

    2. 使用单独构建的Link SDK时,认证方式必须选择ID²;拷贝LinkSDK到external/mqtt/lk_4.x中,并执行命令cd external/mqtt/lk_4.x & ./ls_config_LinkSDK.sh完成Link SDK的配置。

    3. 返回设备端SDK根目录。

  3. 设备应用层集成,完成编译和联调。设备应用调用Link SDK的实现请参考Link SDK MQTT使用示例。需要注意:

    1. 设备接入域名(mqtt_host)、MQTT服务器端口的配置方式:

      设备接入域名:${YourProductKey}.itls.cn-shanghai.aliyuncs.com,其中${YourProductKey}为IoT设备身份认证产品的ProductKey
      MQTT服务器端口:1883
    2. 配置连接参数中追加配置:

      # 使用物联网平台的公共实例
      aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_EXTEND_CLIENTID, "authtype=id2")
      
      # 使用物联网平台的企业实例
      aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_EXTEND_CLIENTID, "authtype=id2, instanceId=xxx")

使用演示示例

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

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

    image..png
说明

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

安全接入

5

本章节您可以在完成设备端集成的基础上,运行设备安全接入阿里云物联网平台,或运行示例体验设备安全接入效果。包括:

  • 前提条件

  • 连接到阿里云物联网平台

前提条件

  • 完成设备端SDK集成。

设备端应用运行时会调用Link SDK接入阿里云物联网平台。使用演示示例的方式:

  1. 编辑vi tools/ls_lp_demo.sh填写如下参数:

    • ProductKey:ID²产品的ProductKey。

    • ProductSecret:ID²产品的ProductSecret。

    • DeviceName:自定义,同一个产品下唯一。

    • InstanceId:填写在ID²产品详情中获得的企业实例ID字符串;如果是公共实例,填写短横线(“-”)。

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

    • 在日志中,可以看到此设备上的ID² ID(“ 000FF...”)

    • 基于ID²进行设备和LP平台之间的双向认证(“Verify iTLS Server AuthCode OK”),并建立设备和LP平台的TLS安全传输通道(ID²-iTLS);MQTT消息开始基于TLS通道进行加密传输(“Start to use itls to encrypt message buffer”)

    image..png
  3. 使用ctrl+c结束指令,执行命令cd ~/返回用户目录。

说明

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

业务数据加密

10

本章节介绍了如何使用IoT设备身份认证实现设备到物联网应用端到端的数据加密,避免用户业务数据(上行和下行)被第三方获取。包括:

  • 前提条件

  • 原理说明

  • 消息订阅

  • 集成指南

前提条件

  • 设备已接入阿里云物联网平台。

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

  • 集成设备端SDK。

  • 集成云端SDK。

原理说明

基于ID²,可提供业务数据从IoT设备到业务服务系统的加密传输,保护业务数据在物联网平台流转过程中的泄露和串改风险,提供如下两种场景:

ID²加密业务密钥

  • 业务密钥(SPKey)由业务服务系统生成,并由其管理密钥的生命周期

  • ID²帮助业务服务系统加密下发业务密钥到物联网设备

适用于:

  • 业务服务系统有自建的业务密钥(SPKey)管理系统,通过ID²安全下发业务密钥到物联网设备

集成指南

本教程,提供ID²加密下发业务密钥(业务服务系统生成和管理SPKey的生命周期)的对接流程说明:

  1. 集成设备端SDK。设备应用调用ID²设备端的API,完成ID²空发、ID²认证挑战字的获取、ID²设备认证和SPKey加密下发,ID²设备端API列表请参见ID²设备端API手册

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

    2. 设备应用调用ID² SDK的获取ID接口(id2_client_get_id),得到设备端的ID² ID

    3. 设备应用发送ID² ID到ID²服务端,获取此ID²的认证码挑战字(challenge)

    4. 设备应用调用ID² SDK的获取挑战字认证码接口(id2_client_get_challenge_auth_code,其中challenge来自上步从ID²云端获得),生成设备端的ID²认证码(AuthCode)

    5. 设备应用发送ProductKey,ID² ID和AuthCode到云端进行设备认证,并在云端使用ID²加密业务密钥(SPKey)

    6. 设备应用调用ID² SDK的解密接口(id2_client_decrypt),完成业务密钥(SPKey)的解密

  2. 集成云端SDK。

    1. 执行命令获取云端SDK。

      # 请先执行 sudo apt-get update
      sudo apt-get update
      wget wget https://id2-schip-daily.oss-cn-shanghai.aliyuncs.com/static_resources/ID2_Server_SDK.tar
    2. 执行命令tar -xvf ID2_Server_SDK.tar完成解压。

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

      <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>aliyun-java-sdk-core</artifactId>
          <version>4.5.6</version>
      </dependency>
    4. 导入云端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);

    5. 发起调用,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());
说明

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

完成

5

ID²通过传输层轻量级的iTLS协议提供了双向认证和数据加密传输,相比标准TLS资源占用低(iTLS通过6个报文、1253字节完成握手过程)。包括:

  • 前提条件

  • 查看到期时间

  • 验证通道加密

前提条件

  • 执行命令sudo apt-get update,sudo apt-get install tcpdump安装tcpdump工具。

查看设备状态

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

image.png

验证通道加密

  1. 在设备端执行命令tcpdump启动抓包。

    sudo tcpdump host iot-sec.itls.cn-shanghai.aliyuncs.com -w lp_id2.pcap
  2. 在设备端开启另外一个SSH窗口,再次执行命令./tools/ls_lp_demo.sh运行设备端演示示例,并观察打印的日志信息。

    image..png
  3. 等待MQTT over ID²-iTLS建连成功,日志中出现心跳响应(“heartbeat response”),中断tcpdump抓包程序,得到指定的抓包数据文件(lp_id2.pcap)。

  4. 在安装了抓包工具的主机中执行scp root@IP:~/lp_id2.pcap ./将抓包数据文件拷贝到本地,使用Wireshark软件打开,在顶部菜单中依次选择分析>启用的协议中,将MQTT勾选取消。单击OK按钮基于抓包数据,进行 ID²-iTLS身份认证和安全通道建立过程分析。

    image.png
  5. 使用抓包工具验证IoT设备身份认证的通道加密,更详细的步骤请查看验证通道加密

说明

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

清理及后续

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²到期时间单独计算,到期时间 = 首次上线时间+授权有效期。详情请查看计费说明

延伸阅读

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

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

  • 使用抓包工具验证IoT设备身份认证的通道加密,请查看最佳实践

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

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

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

阿里云首页 相关技术圈