跳至主要內容

OpenHarmony | 手动生成IDE所需签名文件

guodongAndroid大约 5 分钟OpenHarmony

前言

之前学习 OpenHarmony 时没有关注应用签名的问题,一直都是使用 IDE 的自动签名,最近在学习悬浮窗功能时遇到需要修改 应用APL等级open in new window

对于如何修改 APL等级,官方文档中有详细描述,这里不再讨论,对于修改后如何签名,官网提供了两种方案:

  1. 使用 hap包签名工具open in new window 生成证书,
  2. 使用 DevEco Studio 的 自动签名open in new window

针对上面的两种方案,都可以成功签名并安装运行,本文完结撒花,哈哈~

后面笔者想通过 hap包签名工具 手动生成 IDE 所需的几个签名文件,发现不行,总是安装不上,为此还提了几个 issues:

经过大佬们的帮助,自己又研究了下,终于手动生成了 IDE 所需的几个签名文件,本文记录下。

基本概念

  • 非对称密钥对:数据签名/验签的基础,应用签名工具实现了标准的非对称密钥对生成功能(支持的密钥对类型包括ECC P384/256、RSA2048/3072/4096)
  • CSR:Certificate Signing Request 证书签发请求是生成证书的前提,他包括证书的公钥、证书主题和私钥签名,在申请证书之前,需要先基于密钥对生成CSR,然后提交给CA签发证书。
  • 证书:OpenHarmony采用RFC5280标准构建X509证书信任体系。用于应用签名的OpenHarmony证书共有三级,分为:根CA证书、中间CA证书、最终实体证书,其中最终实体证书分为应用签名证书和profile签名证书。应用签名证书表示应用开发者的身份,可保证系统上安装的应用来源可追溯,profile签名证书实现对profile文件的签名进行验签,保证profile文件的完整性。
  • HAP:OpenHarmony Ability Package 是Ability的部署包,OpenHarmony应用代码围绕Ability组件展开,它是由一个或者多个Ability组成。
  • Profile文件:HarmonyAppProvision 配置文件,hap包中的描述文件,该描述文件描述了已授权的证书权限和设备ID信息等信息。

生成签名文件

准备资源

  • OpenHarmony.p12:OpenHarmony 系统内置密钥库文件
  • hap-sign-tool.jar:hap包签名工具
  • OpenHarmonyProfileRelease.pem:Profile 配置文件签名证书
  • UnsgnedReleasedProfileTemplate.json:修改后的 Profile 配置文件
  • Java环境:运行 hap-sign-tool.jar

生成密钥对

java -jar hap-sign-tool.jar generate-keypair -keyAlias "ohos-app" -keyAlg "ECC"  -keySize "NIST-P-256" -keystoreFile "app.p12" -keyPwd "ohos123456" -keystorePwd "ohos123456"
  • -keyAlias:密钥别名,必填项
  • -keyPwd:密钥口令,可选项
  • -keyAlg:密钥算法,必填项,包括 RSA/ECC,推荐 ECC
  • -keySize:密钥长度,必填项,RSA 算法的长度为 2048 / 3072 / 4096,ECC 算法的长度 NIST-P-256/NIST-P-384
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,不存在则生成
  • -keystorePwd:密钥库口令,可选项

注意:记录下 keyAlias、keyStorePwdkeyPwd 的值,在后续的操作中会使用到

生成证书签名请求

java -jar hap-sign-tool.jar generate-csr -keyAlias "ohos-app" -keyPwd "ohos123456" -subject "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN=OpenHarmony Application Release" -signAlg "SHA256withRSA" -keystoreFile "app.p12" -keystorePwd "ohos123456" -outFile "app.csr"
  • -keyAlias:签名请求的密钥别名,必填项
  • -keyPwd:签名请求的密钥口令,可选项
  • -subject:证书主题,必填项
  • -signAlg:签名算法,必填项,包括 SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库
  • -outFile:输出签名文件 .csr 后缀,可选项,如果不填,则直接输出到控制台

生成应用证书

注意:这里使用 keytool 工具生成用于证书而不是 hap-sign-tool.jar

keytool -gencert -alias "OpenHarmony Application CA" -infile app.csr -outfile app-release.cer -keystore OpenHarmony.p12 -sigalg SHA384withECDSA -storepass 123456 -ext KeyUsage:“critical=digitalSignature” -validity 3650 -rfc
  • -alias:签发证书的CA私钥别名,必填项,OpenHarmony社区CA私钥存于OpenHarmony.p12密钥库文件中且不可修改
  • -infile:证书签名请求文件
  • -outfile:生成的应用证书
  • -keystore:签发证书的CA密钥库,必须是 OpenHarmony.p12 而不是在 生成密钥对 是生成的密钥库
  • -sigalg:证书签名算法,不可修改
  • -storepass:签发证书的CA密钥库密码,OpenHarmony.p12 默认密码为123456,不可修改
  • -ext:证书扩展项,不可修改
  • -validity:证书有效期,自定义天数
  • -rfc:指定输出样式为 RFC,不可修改

签名 Profile 文件

注意:这里必须使用 OpenHarmony.p12 密钥库和 OpenHarmonyProfileRelease.pem 证书

java -jar hap-sign-tool.jar sign-profile -keyAlias "openharmony application profile release" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmonyProfileRelease.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "OpenHarmony.p12" -outFile "app-release-profile.p7b" -keyPwd "123456" -keystorePwd "123456"
  • -keyAlias:生成 Profile 证书的密钥别名,必填项且不可修改
  • -signAlg:签名算法,必填项,包括 SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
  • -mode:签名模式,目前仅支持 localSign,必填项
  • -profileCertFile:Profile 签名证书,必须使用 OpenHarmonyProfileRelease.pem,必填项且不可修改
  • -inFile:输入原始的模板Profile配置文件,必填项
  • -keystoreFile:密钥库文件,必须是 OpenHarmony.p12 而不是在 生成密钥对 是生成的密钥库
  • -keystorePwd:密钥库口令,OpenHarmony.p12 默认密码为:123456,不可修改
  • -keyPwd:密钥口令,OpenHarmony.p12 中的口令默认为:123456
  • -outFile:输出签名后的 Profile 文件,p7b格式,必填项

配置 IDE

经过上述生成签名文件步骤后,我们就得到了以下几个文件:

  • app.p12:自己的密钥库
  • app-release.cer:应用证书
  • app-release-profile.p7b:签名后的 Profile 文件
  • app.csr:证书签名请求,目前没啥用了

把上面的文件分别配置到 IDE 中,重新编译运行即可。

相关内容