近端安全互联样例使用指导

2024-04-18 08:44

本文主要是介绍近端安全互联样例使用指导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

样例介绍

本样例基于rk3568开发板,通过封装openharmony安全子系统deviceauth组件提供的能力,实现了一组可用于设备间快速建立可信认证和连接的接口,通过预先定义关系网,在设备初始化阶段完成端端设备间的认证,构建安全的数据传输通道。

场景介绍

本样例可以作为一个SDK集成到设备版本中,供上层业务APP或IOT SDK使用,具体应用场景可参考下图:

场景1:在城市鸿蒙的智慧管廊场景中,可以通过近端安全互联组件进行设备间可信认证与连接,当燃气监测仪监测到燃气泄漏时,及时对现场进行有效处理。例如:场景内甲烷浓度超标,但是风机没有正常启动,容易造成火灾,导致人员伤亡。在集成近端安全互联组件后,近端设备间可以建立安全的连接,当发生燃气泄漏时,可以实现电磁阀自动关闭、风机自动开启,避免管廊内发生火灾。

场景2:在交通鸿蒙的智慧隧道场景中,可以通过近端安全互联组件进行设备间可信认证与连接,当气体检测仪检测到浓度超标时,近端设备可以自动运行,及时处理现场,避免人工处理错过最佳时间,产生二次伤害。例如:隧道内的气体检测仪检测到浓度超标,但是风机未启动,导致有毒有害气体无法排出,造成人员伤亡。在集成近端安全互联组件后,近端设备间可以组建安全的通信网络,当隧道内气体浓度超标时,检测仪可以直接发送指令给风机,通知风机启动,及时将有毒有害气体排出隧道。

基于上述场景,产生了如下需求:近端设备间实现安全的组网和通信,能够自发进行联动。

本样例以rk3568开发板作为载体,实现设备的近端安全互联与通信,可以应用于上述场景,有效解决该场景中存在的问题。

样例实现的功能包括:

  • 同局域网设备间的互联

  • 获取设备预置的PIN码

  • 基于PIN码和deviceauth模块实现设备互信认证

  • 点对点设备间数据安全传输

本样例可以配合IOT SDK一起使用,IOT SDK主要承担设备注册与PIN码管理的功能,使用者也可以根据自身的实际情况选择用业务APP代替。

IOT SDK源码可以从如下地址获取:https://github.com/huaweicloud/huaweicloud-iot-device-sdk-c

约束与限制

特别说明

  • 本样例仅适用于端端设备间需要保持长连接的场景,除非本端业务主动断开与对端设备的连接,样例本身不会自动超时断开。

  • 设备间连接断开后,当再次连接时会重新进行设备认证,因此会获得新的会话密钥。

  • 保持长连接可以保障设备间数据传输的及时性,但也存在一些安全隐患,比如会话密钥不会进行更新,时间太长就存在泄露的风险,如果对该安全风险比较敏感,请勿使用本样例。

硬件说明

通过测试,rk3568开发板在作为服务端时,最多可连接100台客户端,在作为客户端时,最多可连接100台服务端。

本样例仅选取两块rk3568开发板进行介绍与演示,其中一块作为服务端,一块作为客户端。

环境准备

硬件准备

安装windows 10及以上操作系统的PC主机

两台rk3568开发板

构建环境

首先需要在PC主机上安装Ubuntu操作系统,以提供基础的编译环境,安装方法可参考:https://developer.huawei.com/consumer/cn/training/course/video/C101639987816176315

然后完成Ubuntu基础环境的配置,可参考:https://developer.huawei.com/consumer/cn/training/course/video/C101639988048536240

在Ubuntu系统中下载源码前请先执行如下指令安装所需的工具:

sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs liblz4-tool libssl-dev libtinfo-dev libtinfo5 openjdk-17-jre-headless libc6 libstdc++6 default-jdk u-boot-tools mtools mtd-utils scons gcc-arm-linux-gnueabi

该样例适配的源码版本为:Openharmony-3.1-Release,请确保下载代码时分支选择正确。

源码获取方式可参考开源社区文档 http://www.openharmony.cn/download ,选择第一种获取方式,并使用以下命令替换文档中的下载命令:

repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

编译验证

下载源码后,需要先编译rk3568版本通过,以确保编译环境正常可用。

切换到源码根目录,执行如下命令,安装编译器及二进制工具:

bash build/prebuilts\_download.sh

接着执行如下命令进行版本编译:

./build.sh --product-name rk3568 --ccache

编译完成后,日志中显示如下,则表示编译成功:

\=====build rk3568 successful.

编译生成的镜像文件在 out/rk3568/packages/phone/images/ 目录下。

集成样例

样例源码介绍

样例源码存放在00_src目录下,各个目录中的文件功能如下表:

目录功能说明
dconnectcaseone基于openharmony安全子系统deviceauth组件开发的分布式安全通信样例,可用于多个设备间基于预先定义的关系网完成可信认证与连接,构建安全的数据传输通道
test用于验证样例功能可用的业务程序示例代码,使用者可以参考该代码定制自己的业务程序
figures用于存放readme文件中的图片资源

修改社区源码

基于rk3568设备集成编译该样例时,需要按照如下步骤修改源码(+表示增加行,-表示删除行):

  • 修改base/security/deviceauth/common_lib/impl/src/clib_types.c文件内容:
 void *ClibMalloc(uint32_t size, char val){
-    if (size == 0 || size > CLIB_MAX_MALLOC_SIZE) {
+    if (size == 0) {return NULL;}void* addr = malloc(size);
  • 修改base/security/deviceauth/common_lib/interfaces/clib_types.h文件内容:
 #define NULL 0#endif-#define CLIB_MAX_MALLOC_SIZE 4096 /* 4K */
-#ifdef __cplusplusextern "C" {#endif
  • 修改build/prebuilts_download.sh文件内容:
-node_js_ver=v12.18.4
+node_js_ver='v12.18.4'node_js_name=node-${node_js_ver}-${host_platform}-x64node_js_pkg=${node_js_name}.tar.gz
  • 修改third_party/jsframework/package.json文件内容:
     "sinon": "^9.2.2","ts-node": "^9.0.0","tslib": "^2.0.3",
-    "typescript": "^4.1.2"
+    "typescript": "4.1.3"}}

接着按照如下流程将样例集成到rk3568产品版本中:

  • 在社区源码的vendor目录下新建目录kits,并将00_src目录下的所有文件放到kits目录下。

  • 修改build/subsystem_config.json文件,增加如下内容,新增一个subsystem:

"kits": {"path": "vendor/kits","name": "kits"
},
  • 修改productdefine/common/products/rk3568.json文件,在parts中新增kits中的两个部件:
"type": "standard","product_build_path": "device/hihope/build","parts":{"kits:dconnectcaseone":{},"kits:test":{},"ace:ace_engine_standard":{},

编译镜像

切换到源码根目录,执行如下命令,进行编译构建:

./build.sh --product-name rk3568 --ccache

编译成功后,在 /out/rk3568 目录中通过如下指令检查是否包含本样例:

find ./out/rk3568 -name "libdconnectcaseone.z.so"

通过如下指令检查是否包含测试用业务程序:

find ./out/rk3568/kits -name "demo"

如果找不到样例对应的so文件,请检查00_src目录下的文件是否全部放到了kits目录下(请注意:ohos.build文件也是必需的)。

烧录镜像

环境准备

从 out/rk3568/packages/phone/images/ 目录下复制编译成功的rk3568镜像文件到PC的windows环境中。

然后按照如下流程配置PC的HDC环境:

  • 切换到Ubuntu环境中的源码根目录,执行如下命令,编译ohos-sdk包:
    ./build.sh --product-name ohos-sdk --ccache
  • 编译完成后,从out/sdk/ohos-sdk/windows/ 目录下将toolchains目录整个复制出来,放到D盘根目录下。

  • 将toolchains目录中的hdc_std.exe文件重命名为hdc.exe,方便后续使用,如下图所示:

  • 在环境变量-系统变量-Path中新建一项,值设置为D:\toolchains,之后可以在cmd窗口中直接使用HDC指令:

烧录指导

请参考如下链接进行烧录:

https://gitee.com/hihope_iot/docs/blob/master/HiHope_DAYU200/docs/%E7%83%A7%E5%BD%95%E6%8C%87%E5%AF%BC%E6%96%87%E6%A1%A3.md

烧录验证

烧录完成后,开发板正常启动进入桌面(若未正常启动,需检查烧录是否失败)。

保持USB线仍为连接状态,在PC上开启一个cmd窗口,执行 hdc list targets,可以看到对应设备的序列号,如下图:

接着按下图所示指令执行,可以看到输出libdconnectcaseone.z.so的详细信息,则表示烧录成功:

另外,业务程序对应的可执行文件可通过如下方式找到:

使用说明

开发板烧录镜像完成后,可以通过HDC指令进入设备的shell界面,切换到/system/bin目录下,通过ls -l demo指令可以看到可执行文件demo,就是我们的测试用业务程序。

将两台设备连接网络,通过ifconfig指令查看设备的IP地址,按照下图所示的操作将其中一台设备初始化为服务端,另一台初始化为客户端,在执行客户端初始化时两端设备会自动进行绑定和认证,可以新开一个shell窗口查看认证过程中的日志。

服务端初始化(上边为初始化操作指令,下边为样例打印的日志):

客户端初始化(上边为初始化操作指令,下边为样例打印的日志):

可信认证(左侧为服务端,右侧为客户端,认证会在初始化客户端时自动触发):

收发数据(左侧为服务端,右侧为客户端):

接口列表

本样例将枚举及宏定义、回调函数、对外接口的定义内容放置于下面的头文件中:

dconnectcaseone/interface/include/dconncaseone_interface.h

回调函数

接口名描述
typedef void (*SendDataCallback)(const char *device, uint32_t result)数据发送回调函数
typedef void (*ReceiveDataCallback)(const char *deviceId, const char *receiveData, uint32_t datelen)数据接收回调函数
typedef bool (*IsValidIP)(const char *ip)校验当前连接服务端的
客户端IP地址是否合法
typedef bool (*IsValidDeviceID)(const char *deviceID)校验当前连接服务端的
客户端的设备ID是否合法
typedef char *( *GetAuthKey)(const char *targetDeviceID)获取对应设备的PIN码
typedef char *( *GetDeviceID)()获取本设备ID

样例接口

接口名描述
DCONN_API_PUBLIC uint32_t InitDConnCaseOne(uint32_t type, const char *ipAry, char *errorIp);初始化样例。初始化类型:INIT_SERVICE/INIT_CLIENT
ipAry:IP地址字符串
初始化服务端时仅可传入一个 IP 地址
初始化客户端时可传入多个,以半角逗号分隔
DCONN_API_PUBLIC void RegisterCallback(const CallbackParam *callback);注册回调函数
DCONN_API_PUBLIC uint32_t DConnSendData(const char *targetDeviceId, const char *data, uint32_t dataLen);发送数据
DCONN_API_PUBLIC void UnRegisterCallback();取消注册回调函数
DCONN_API_PUBLIC void CloseDConnCaseOne();关闭样例
DCONN_API_PUBLIC const char *GetDConnVersion();获取样例版本号

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

这篇关于近端安全互联样例使用指导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914297

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完