OpenHarmony—Hap包签名工具

概述

为了保证OpenHarmony应用的完整性和来源可靠,在应用构建时需要对应用进行签名。经过签名的应用才能在真机设备上安装、运行、和调试。developtools_hapsigner仓 提供了签名工具的源码,包含密钥对生成、CSR文件生成、证书生成、Profile文件签名、Hap包签名等功能。

说明:
针对无需通过ACL跨级别申请权限的应用,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文件:

HarmonyAppProvision配置文件,hap包中的描述文件,该描述文件描述了已授权的证书权限和设备ID信息等信息。

约束与限制

  • Hap包签名工具基于Java语言开发,需要Java8以上Java环境运行。
  • 一键签名等脚本文件基于Python语言开发,使用需配置环境python3.5及以上。

编译构建

  1. 该工具基于Gradle 7.1编译构建,请确认环境已安装配置Gradle环境,并且版本高于或等于7.1。
gradle -v
  1. 下载代码,命令行打开文件目录至developtools_hapsigner/hapsigntool,执行命令进行编译打包。
    gradle build 

    gradle jar
  1. 编译后得到二进制文件,目录为: ./hap_sign_tool/build/libs/hap-sign-tool.jar。

开发指导

场景介绍

OpenHarmony系统内置密钥库文件,文件名称为OpenHarmony.p12,内含根CA证书、中间CA证书、最终实体证书等信息,工具基于该密钥库文件对OpenHarmony应用进行签名。

按照有无应用签名证书可分为以下两种场景:

  1. 无应用签名证书场景: 开发者使用该工具对Hap包签名时,需按照签名步骤从第一步生成应用签名证书密钥对依次完成应用签名证书生成、profile文件签名、应用签名流程。
  2. 有应用签名证书场景: 开发者可直接从签名步骤第三步对profile文件进行签名开始开发,使用应用签名证书和包含对应密钥的本地密钥库文件对应用进行签名。

命令说明

  1. 输出命令帮助信息。
    -help     # 输出命令帮助信息(不输入参数默认输出命令帮助信息)
  1. 输出版本信息。
    -version  # 输出版本信息
  1. 生成密钥对。
    generate-keypair : 生成密钥对
        ├── -keyAlias          # 密钥别名,必填项
        ├── -keyPwd            # 密钥口令,可选项
        ├── -keyAlg            # 密钥算法,必填项,包括RSA/ECC
        ├── -keySize           # 密钥长度,必填项,RSA算法的长度为2048/3072/4096,ECC算法的长度NIST-P-256/NIST-P-384
        ├── -keystoreFile      # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd       # 密钥库口令,可选项
  1. 生成证书签名请求。
    generate-csr : 生成证书签名请求
        ├── -keyAlias          # 密钥别名,必填项
        ├── -keyPwd            # 密钥口令,可选项
        ├── -subject           # 证书主题,必填项
        ├── -signAlg           # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
        ├── -keystoreFile      # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd       # 密钥库口令,可选项
        ├── -outFile           # 输出文件,可选项,如果不填,则直接输出到控制台
  1. 生成根CA/中间CA证书。
    generate-ca : 生成根CA/中间CA证书,如果密钥不存在,一起生成密钥
        ├── -keyAlias                        # 密钥别名,必填项
        ├── -keyPwd                          # 密钥口令,可选项
        ├── -keyAlg                          # 密钥算法,必填项,包括RSA/ECC
        ├── -keySize                         # 密钥长度,必填项,RSA算法的长度为2048/3072/4096,ECC算法的长度NIST-P-256/NIST-P-384
        ├── -issuer                          # 颁发者的主题,可选项,如果不填,表示根CA
        ├── -issuerKeyAlias                  # 颁发者的密钥别名,可选项,如果不填,表示根CA
        ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
        ├── -subject                         # 证书主题,必填项
        ├── -validity                        # 证书有效期,可选项,默认为3650天
        ├── -signAlg                         # 签名算法,必填项,包括SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
        ├── -basicConstraintsPathLen         # 路径长度,可选项,默认为0
        ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd                     # 密钥库口令,可选项
        ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
        ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
        ├── -outFile                         # 输出文件,可选项,如果不填,则直接输出到控制台
  1. 生成应用调试/发布证书。
    generate-app-cert : 生成应用调试/发布证书
        ├── -keyAlias                        # 密钥别名,必填项
        ├── -keyPwd                          # 密钥口令,可选项
        ├── -issuer                          # 颁发者的主题,必填项
        ├── -issuerKeyAlias                  # 颁发者的密钥别名,必填项
        ├── -issuerKeyPwd                    # 颁发者的密钥口令,可选项
        ├── -subject                         # 证书主题,必填项
        ├── -validity                        # 证书有效期,可选项,默认为3650天
        ├── -signAlg                         # 签名算法,必填项,包括SHA256withECDSA / SHA384withECDSA;
        ├── -issuerKeystoreFile              # 签发者密钥库文件,可选项,JKS或P12格式
        ├── -issuerKeystorePwd               # 签发者密钥库口令,可选项
        ├── -keystoreFile                    # 密钥库文件,必填项,JKS或P12格式
        ├── -keystorePwd                     # 密钥库口令,可选项
        ├── -outForm                         # 输出证书文件的格式,包括 cert / certChain,可选项,默认为certChain
        ├── -rootCaCertFile                  #  outForm为certChain时必填,根CA证书文件
        ├── -subCaCertFile                   #  outForm为certChain时必填,中间CA证书文件
        ├── -outFile                         #  输出证书文件(证书或证书链),可选项,如果不填,则直接输出到控制台
  1. 生成profile调试/发布证书。
    generate-profil
导出 HAPHarmonyOS Ability Package)通常是指将开发完成的应用程序打成可在 HarmonyOS 设备上安装和运行的格式。以下是导出 HAP 的一般步骤: ### 开发环境准备 在开始导出 HAP 之前,确保已经完成了以下准备工作: - 安装并配置好 DevEco Studio。 - 创建或导入项目,并完成应用代码编写和调试。 - 确保项目的 `config.json` 文件中配置了正确的模块信息、签名信息等。 ### 构建 HAP 1. **构建未签名HAP **: 在 DevEco Studio 中选择相应的模块,右键点击并选择 "Build Module" 选项,系统会生成一个未签名HAP ,通常位于模块目录下的 `build/default/outputs/hap` 文件夹中。 2. **签名工具准备**: 如果需要手动签名 HAP ,可以使用类似 OpenHarmony 提供的签名工具 `hap-sign-tool.jar` 来进行签名操作。签名命令如你提供的示例所示: ```bash java -jar hap-sign-tool.jar sign-app -keyAlias "oh-app1-key-v1" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "app1.pem" -profileFile "app1-profile.p7b" -inFile "app1-unsigned.zip" -keystoreFile "OpenHarmony.p12" -outFile "app1-signed.hap" -keyPwd "123456" -keystorePwd "123456" ``` 此命令将对未签名的 ZIP 文件进行签名,并输出为 `.hap` 格式[^1]。 3. **使用 DevEco Studio 签名**: 在 DevEco Studio 中,也可以通过设置签名文件和密钥来自动完成签名过程。进入项目设置界面,配置签名证书路径及密码后,直接执行构建任务即可生成已签名HAP 。 ### 导出 HAP 1. **从构建目录获取**: 构建完成后,前往模块的 `build/default/outputs/hap` 目录下找到生成的 `.hap` 文件。 2. **通过设备管理工具部署**: 可以使用 `hdc` 工具将 `.hap` 文件安装到模拟器或真机设备上进行测试。 3. **发布到应用市场**: 将最终的 `.hap` 文件提交到华为应用市场或其他支持 HarmonyOS 的应用商店,以便用户下载和安装。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值