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

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

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景