样例介绍
本样例基于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 __cplusplus
- extern "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}-x64
- node_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_CLIENTipAry: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
开辟基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私掩护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开辟:https://qr21.cn/FV7h05
- Ability开辟
- UI开辟
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 装备管理
- 装备利用信息统计
- DFX
- 国际化开辟
- 折叠屏系列
- ……
鸿蒙开辟面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开辟面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开辟必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开辟系统底层方向
5.鸿蒙音视频开辟方向
6.鸿蒙车载开辟方向
7.鸿蒙南向开辟方向
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |