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

打印 上一主题 下一主题

主题 679|帖子 679|积分 2037

样例介绍

本样例基于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系统中下载源码前请先实行如下指令安装所需的工具:
  1. 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 ,选择第一种获取方式,并利用以下命令更换文档中的下载命令:
  1. repo init -u https://gitee.com/openharmony/manifest.git -b refs/tags/OpenHarmony-v3.1-Release --no-repo-verify
  2. repo sync -c
  3. repo forall -c 'git lfs pull'
复制代码
编译验证

下载源码后,须要先编译rk3568版本通过,以确保编译环境正常可用。
切换到源码根目录,实行如下命令,安装编译器及二进制工具:
  1. bash build/prebuilts\_download.sh
复制代码
接着实行如下命令进行版本编译:
  1. ./build.sh --product-name rk3568 --ccache
复制代码
编译完成后,日志中显示如下,则表现编译成功:
  1. \=====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文件内容:
  1. void *ClibMalloc(uint32_t size, char val)
  2. {
  3. -    if (size == 0 || size > CLIB_MAX_MALLOC_SIZE) {
  4. +    if (size == 0) {
  5.          return NULL;
  6.      }
  7.      void* addr = malloc(size);
复制代码


  • 修改base/security/deviceauth/common_lib/interfaces/clib_types.h文件内容:
  1. #define NULL 0
  2. #endif
  3. -#define CLIB_MAX_MALLOC_SIZE 4096 /* 4K */
  4. -
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
复制代码


  • 修改build/prebuilts_download.sh文件内容:
  1. -node_js_ver=v12.18.4
  2. +node_js_ver='v12.18.4'
  3. node_js_name=node-${node_js_ver}-${host_platform}-x64
  4. node_js_pkg=${node_js_name}.tar.gz
复制代码


  • 修改third_party/jsframework/package.json文件内容:
  1.      "sinon": "^9.2.2",
  2.      "ts-node": "^9.0.0",
  3.      "tslib": "^2.0.3",
  4. -    "typescript": "^4.1.2"
  5. +    "typescript": "4.1.3"
  6.    }
  7. }
复制代码
接着按照如下流程将样例集成到rk3568产品版本中:


  • 在社区源码的vendor目录下新建目录kits,并将00_src目录下的全部文件放到kits目录下。
  • 修改build/subsystem_config.json文件,增加如下内容,新增一个subsystem:
  1. "kits": {
  2.   "path": "vendor/kits",
  3.   "name": "kits"
  4. },
复制代码


  • 修改productdefine/common/products/rk3568.json文件,在parts中新增kits中的两个部件:
  1. "type": "standard",
  2.   "product_build_path": "device/hihope/build",
  3.   "parts":{
  4.       "kits:dconnectcaseone":{},
  5.       "kits:test":{},
  6.       "ace:ace_engine_standard":{},
复制代码
编译镜像

切换到源码根目录,实行如下命令,进行编译构建:
  1. ./build.sh --product-name rk3568 --ccache
复制代码
编译成功后,在 /out/rk3568 目录中通过如下指令检查是否包含本样例:
  1. find ./out/rk3568 -name "libdconnectcaseone.z.so"
复制代码
通过如下指令检查是否包含测试用业务程序:
  1. 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包:
  1.     ./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


  • 基本概念
  • 构建第一个ArkTS应用
  • ……

开辟基础知识: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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表