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
功能简介
为了保证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文件中,配置项说明:
{
"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配置项中不包含签名信息。
- 当未配置签名信息的工程执行HAP打包时,仅会生成unsigned标记的HAP包。
- hvigor编译构建工具进行build时,提示未配置签名信息。
- 未签名的HAP包在系统中安装时,报未签名错误。
DevEco Studio 自动签名
应用在真机设备上运行,需要提前为应用进行签名,DevEco Studio为开发者提供了自动化签名方案,可以一键完成应用签名。
配置自动签名:
- 单击File > Project Structure > Project > SigningConfigs界面勾选Automatically generate signature,等待自动签名完成即可,单击OK。
- 查看build-profile.json5配置信息,配置信息中增加自动签名生成的证书信息。
- 使用hvigor编译构建工具build,在output目录中生成标记为signed的HAP包。
修改应用权限等级
OpenHarmony针对应用访问额外的系统或其他应用的数据(包括用户个人数据)或功能,提供了一种访问控制机制来保证这些数据或功能不会被不当或恶意使用,即应用权限。根据权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三种,等级依次提高。
- normal权限
- system_basic权限
- system_core权限
默认情况下自动化签名功能只能申请权限等级为“normal”的权限。若使用了更高级别的权限system_core或system_basic,需修改自动化签名所需要的Profile模板,然后再使用自动化签名功能对应用进行签名。
修改Profile模板:
- 打开OpenHarmony SDK所在目录,可通过工程根路径local.properties文件或DevEco Studio菜单栏中单击File > Settings > SDK > OpenHarmony 界面查看 。
- 在OpenHarmony SDK目录下,进入{Version} > toolchains > lib文件夹,打开UnsgnedReleasedProfileTemplate.json文件。
- 根据需求对Profile文件进行修改,例如需申请最高级别的权限等级,则修改apl为 system_core,Profile修改参考HarmonyAppProvision配置文件的说明。
- 使用DevEco Studio自动化签名功能(需重新点击Automatically generate signature )为应用重新生成证书文件和配置信息,安装后通过bm dump指令查看权限生效情况。
很完整的签名方法整理,学习了
调试需申请最高级别的权限等级,其实可以用acl
单独配置ACL,对于调试来说比较耗费时间和精力,还需要关注权限的等级。
现在OpenHarmony签名比之前方便多了
签名后如果不能上架感觉意义就不大了
之后我会写一篇现在版本的关于签名的系统配置,系统开发商可自行生成专属签名文件,给HAP包签名。签名后期是由系统的应用管理平台给HAP包签名后分发到应用商店进行安装的,无需开发者关心签名的具体流程。只需要调试时,使用DEVECO自动签名调试即可,减少开发者的开发成本。
给大佬提前点赞
感谢支持