跳至主要內容

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

guodongAndroid大约 5 分钟OpenHarmony

前言

在上一篇文章 OpenHarmony | 手动生成IDE所需签名文件 中我们使用 Keytool 工具来生成 应用调试/发布证书,本文将介绍完全使用 hap-sign-tool.jar 签名工具来生成 IDE 所需签名文件。

准备资源

  • OpenHarmony.p12:OpenHarmony 系统内置密钥库文件
  • OpenHarmonyProfileRelease.pem:Profile 配置文件签名证书
  • hap-sign-tool.jar:hap 包签名工具
  • UnsgnedReleasedProfileTemplate.json:Profile 配置模板文件,主要修改 bundle-name 字段为自己的应用包名

上述文件可以在 dist · OpenHarmony/developtools_hapsigneropen in new window 里获取

然后修改 Profile 配置模板文件,主要修改 bundle-name 字段为自己的应用包名


  • rootCA.cer:OpenHarmony 系统内置根签名文件
  • subCA.cer:OpenHarmony 系统内置中间签名文件

上述文件可以在 autosign/result · OpenHarmony/developtools_hapsigneropen in new window 里获取


  • 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-app-cert -keyAlias "ohos-app" -signAlg "SHA256withECDSA"  -issuer "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN= OpenHarmony Application CA" -issuerKeyAlias "openharmony application ca" -subject "C=CN,O=OpenHarmony,OU=OpenHarmony Team,CN=OpenHarmony Application Release" -keystoreFile "app.p12" -subCaCertFile "subCA.cer" -rootCaCertFile "rootCA.cer" -outForm "certChain" -outFile "app-release.cer" -keyPwd "ohos123456" -keystorePwd "ohos123456" -issuerKeyPwd "123456" -validity "365" -issuerKeystoreFile "OpenHarmony.p12" -issuerKeystorePwd "123456"
  • -keyAlias:密钥别名,必填项,使用第一步生成的密钥对别名
  • -keyPwd:密钥口令,可选项,使用第一步生成的密钥对别名口令
  • -issuer:颁发者的证书主题,必填项,使用 subCA.cer 提供的主题且不可修改
  • -issuerKeyAlias:颁发者的密钥别名,必填项,使用系统内置的 subCA.cer 提供的密钥别名且不可修改
  • -issuerKeyPwd:颁发者的密钥口令,可选项,使用系统内置的 subCA.cer 提供的密钥别名口令且不可修改,默认为:123456
  • -issuerKeystoreFile:颁发者密钥库文件,必填项,JKS / P12 格式,使用系统内置的 OpenHarmony.p12 密钥库
  • -issuerKeystorePwd:颁发者密钥库口令,可选项,使用系统内置的 OpenHarmony.p12 密钥库口令,默认为:123456
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outForm:输出证书文件的格式,包括 cert / certChain,可选项,默认为 certChain
  • -rootCaCertFile:outForm 为 certChain 时必填,根CA证书文件,使用系统内置的 rootCA.cer
  • -subCaCertFile:outForm 为 certChain 时必填,中间CA证书文件,系统内置的 subCA.cer
  • -outFile:输出证书 .cer 后缀,可选项,如果不填,则直接输出到控制台

签名 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-profile-release.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-profile-release.p7b:签名后的 Profile 文件

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

附录

证书主题中字段的含义

中文字段英文字段简称字段描述
公用名称Common NameCN对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端证书则为证书申请者的姓名;
单位名称Organization NameO对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称;
所在城市LocalityL
所在省份State/ProviceS
所在国家CountryC只能是国家字母缩写,如中国:CN
电子邮件EmailE
多个姓名字段G
介绍Description
电话号码Phone格式要求: +国家区号 城市区号 电话号码,如: +86 732 88888888
地址STREET
邮政编码PostalCode
其他内容OU