天天看点

OpenHarmony应用签名方法

作者:51CTO

作者:TiZizzz

为了保证 OpenHarmony 应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在设备上安装、运行、和调试。

OpenHarmony应用签名方法

DevEco Studio 自动化签名功能仅用于应用调试阶段使用,不可用于发布上架应用市场。

文档环境

开发环境:MacBook Pro

DevEco Studio 版本:DevEco Studio 3.1 Beta1(3.1.0.200)

SDK 版本:3.2.10.6

开发板型号:DAYU 200

系统版本:OpenHarmony 3.2 Beta5

基本概念

Hap 包签名工具支持本地签名需求的开发,为 OpenHarmony 应用提供完整性保护和来源管控机制,该签名工具基于 PKI 公钥证书的机制实现。

在进行开发前,开发者应了解以下基本概念:

非对称密钥对:非对称密钥算法是数据签名/验签的基础,应用签名工具实现了标准的非对称密钥对生成功能(支持的密钥对类型包括 ECC P384/256、RSA2048/3072/4096)

CSR:CSR(Certificate Signing Request)证书签发请求是生成证书的前提,他包括证书的公钥、证书主题和私钥签名,在申请证书之前,需要先基于密钥对生成 CSR,然后提交给 CA 签发证书。

证书:OpenHarmony 采用 RFC5280 标准构建 X509 证书信任体系。

用于应用签名的 OpenHarmony 证书共有三级,分为:根 CA 证书、中间 CA 证书、最终实体证书,其中最终实体证书分为应用签名证书和 profile 签名证书。

应用签名证书表示应用开发者的身份,可保证系统上安装的应用来源可追溯,profile 签名证书实现对 profile 文件的签名进行验签,保证 profile 文件的完整性。

HAP 包:HAP(OpenHarmony Ability Package)是 Ability 的部署包,OpenHarmony 应用代码围绕 Ability 组件展开,它是由一个或者多个 Ability 组成。

profile 文件:Hap 包中的描述文件,该描述文件描述了已授权的证书权限和设备 ID 信息等信息。

签名配置

应用签名信息配置于工程目录 build-profile.json5 文件中。

配置项说明如下:

{
  "app": {                                 //工程级别信息配置,包含API等级、签名和产品信息
    "signingConfigs": [{                   //工程的签名信息,可包含多个签名信息
      "name": "default",                   //标识签名方案的名称
      "material": {                        //该方案的签名材料
        "certpath": "ohos.cer",            //调试或发布证书文件,格式为.cer
        "storePassword": "******",         //密钥库Password,以密文形式呈现
        "keyAlias": "debug_ohos",          //密钥别名信息
        "keyPassword": "******",           //密钥Password,以密文形式呈现
        "profile": "ohos.p7b",             //调试或发布证书Profile文件,格式为.p7b
        "signAlg": "SHA256withECDSA",      //密钥库signAlg参数
        "storeFile": "ohos.p12"            //密钥库文件,格式为.p12
      }
    }],
    "products": [{                         //定义构建的产品品类,如通用默认版、付费版、免费版等
      "name": "default",                   //定义产品的名称,由开发者自定义
      "signingConfig": "default"           //指定当前产品品类对应的签名信息,签名信息需要在signingConfigs中进行定义
    }]
    ···
  }
}
···           

自动化签名

①未签名的 HAP 包

使用 DevEco Studio 创建一个新的工程,默认是没有配置签名信息的。签名信息可通过工程根路径的 build-profile.json5 文件查看。

未签名的 HAP 包无法保证应用的完整性和来源可靠,在 OpenHarmony 系统是无法被安装的。

新创建的工程,在 build-profile.json5 文件的 signingConfigs 配置项中不包含签名信息。

OpenHarmony应用签名方法

当未配置签名信息的工程执行 HAP 打包时,仅会生成 unsigned 标记的 HAP 包。

OpenHarmony应用签名方法

hvigor 编译构建工具进行 build 时,提示未配置签名信息。

OpenHarmony应用签名方法

未签名的 HAP 包在系统中安装时,报未签名错误。

OpenHarmony应用签名方法

DevEco Studio 自动签名

应用在真机设备上运行,需要提前为应用进行签名,DevEco Studio 为开发者提供了自动化签名方案,可以一键完成应用签名。

配置自动签名:单击File→Project Structure→Project→SigningConfigs 界面勾选 Automatically generate signature,等待自动签名完成即可,单击OK。

OpenHarmony应用签名方法

查看 build-profile.json5 配置信息,配置信息中增加自动签名生成的证书信息。

OpenHarmony应用签名方法

使用 hvigor 编译构建工具 build,在 output 目录中生成标记为 signed 的 HAP 包。

OpenHarmony应用签名方法

修改应用权限等级

OpenHarmony 针对应用访问额外的系统或其他应用的数据(包括用户个人数据)或功能,提供了一种访问控制机制来保证这些数据或功能不会被不当或恶意使用,即应用权限。

根据权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三种,等级依次提高:

  • normal 权限
  • system_basic 权限
  • system_core 权限

默认情况下自动化签名功能只能申请权限等级为“normal”的权限。若使用了更高级别的权限 system_core 或 system_basic,需修改自动化签名所需要的 Profile 模板,然后再使用自动化签名功能对应用进行签名。

修改 Profile 模板:打开 OpenHarmony SDK 所在目录,可通过工程根路径 local.properties 文件或 DevEco Studio 菜单栏中单击File→Settings→SDK→OpenHarmony 界面查看 。

OpenHarmony应用签名方法

在 OpenHarmony SDK 目录下,进入{Version}→toolchains→lib 文件夹,打开 UnsgnedReleasedProfileTemplate.json 文件。

OpenHarmony应用签名方法

根据需求对 Profile 文件进行修改,例如需申请最高级别的权限等级,则修改 apl 为 system_core。

Profile 修改参考 HarmonyAppProvision 配置文件的说明:

https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/security/app-provision-structure.md/           
OpenHarmony应用签名方法

使用 DevEco Studio 自动化签名功能(需重新点击 Automatically generate signature )为应用重新生成证书文件和配置信息,安装后通过 bm dump 指令查看权限生效情况。

OpenHarmony应用签名方法

来源:OST开源开发者

继续阅读