OpenHarmony | 手动生成IDE所需签名文件
大约 5 分钟OpenHarmony
前言
之前学习 OpenHarmony 时没有关注应用签名的问题,一直都是使用 IDE 的自动签名,最近在学习悬浮窗功能时遇到需要修改 应用APL等级。
对于如何修改 APL等级,官方文档中有详细描述,这里不再讨论,对于修改后如何签名,官网提供了两种方案:
针对上面的两种方案,都可以成功签名并安装运行,本文完结撒花,哈哈~
后面笔者想通过 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、keyStorePwd 和 keyPwd 的值,在后续的操作中会使用到
生成证书签名请求
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 中,重新编译运行即可。