OpenHarmony开发者论坛

标题: OpenHarmony应用签名 - DevEco Studio 自动签名 [打印本页]

作者: tizizzz    时间: 2023-12-7 09:34
标题: OpenHarmony应用签名 - DevEco Studio 自动签名
[md]# 概述

## 文档环境

开发环境:Windows 11

DevEco Studio 版本:DevEco Studio 4.0 Release(4.0.0.600)

SDK 版本:4.0.10.13

开发板型号:DAYU200(RK3568)

系统版本:OpenHarmony-4.0-Release

## 功能简介

为了保证**OpenHarmony**应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在设备上安装、运行、和调试。**DevEco Studio自动化签名功能仅用于应用调试阶段使用,不可用于发布上架应用市场。**

## 基本概念

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**文件中,配置项说明:

```plain
{
  "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**配置项中不包含签名信息。

![image.png](https://forums-obs.openharmony.c ... xz36rq05rkt5cac.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... u1hvuhzf2ufbl2s.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... lehoqezlir003wr.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... k89t86939ee458k.png "image.png")

## DevEco Studio 自动签名

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

配置自动签名:

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

![image.png](https://forums-obs.openharmony.c ... dzfdxp77p9f8spf.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... g9g2sguffkrg4jv.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... 9nnx60hnv2hf96a.png "image.png")

## 修改应用权限等级

**OpenHarmony**针对应用访问额外的系统或其他应用的数据(包括用户个人数据)或功能,提供了一种访问控制机制来保证这些数据或功能不会被不当或恶意使用,即应用权限。根据权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三种,等级依次提高。

* normal权限
* system\_basic权限
* system\_core权限

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

修改**Profile**模板:

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

![image.png](https://forums-obs.openharmony.c ... 2j4tnexfia4aaad.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... 89xv1jmxjxw9vwc.png "image.png")

* 根据需求对**Profile**文件进行修改,例如需申请最高级别的权限等级,则修改**apl**为 **system\_core**,**Profile**修改参考[HarmonyAppProvision配置文件的说明](https://docs.openharmony.cn/page ... ision-structure.md/)。

![image.png](https://forums-obs.openharmony.c ... tqnqxs9hzozzmdk.png "image.png")

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

![image.png](https://forums-obs.openharmony.c ... v6uiigxxuu8ah8m.png "image.png")

# 参考文档

* [HarmonyOS应用开发官网 - 配置编译构建信息](https://developer.harmonyos.com/ ... on-0000001218440654)
* [HarmonyOS应用开发官网 - 自动化签名方案](https://developer.harmonyos.com/ ... on-0000001271659465)
* [OpenAtom OpenHarmony - Hap包签名工具概述](https://docs.openharmony.cn/page ... gntool-overview.md/)
[/md]
作者: yihui    时间: 2023-12-17 10:26
感谢分享




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5