跳至主要內容

OpenHarmony | 生成私有签名

guodongAndroid大约 14 分钟OpenHarmony

前言

OpenHarmony | 手动生成IDE所需签名文件 的折腾过程中,一直想生成自己的签名文件,使用自己的签名文件对 Hap 包进行签名然后安装,可惜一直没有成功,最近在网上看到这篇文章 OpenHarmony应用签名 - 厂商私有签名open in new window,跟着文章中的步骤加上自己试错,终于可以生成自己的签名文件并安装成功,遂记录一下此过程。

开发环境

操作系统:Windows 10

DevEco Studio版本:3.1 Release,Build Version: 3.1.0.500

SDK 版本:3.2.12.2(Normal SDK)

开发板型号:DAYU 200

系统版本:OpenHarmony 3.2.12.2

Java 版本:1.8.0_221

准备资源

签名文件

1.生成密钥对

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
  • -keySize:密钥长度,必填项,RSA 算法的长度为 2048 / 3072 / 4096,ECC 算法的长度 NIST-P-256/NIST-P-384
  • -keystoreFile:输出的密钥库文件,必填项,JKS / P12 格式
  • -keystorePwd:密钥库口令,可选项

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

2.生成根证书

java -jar hap-sign-tool.jar generate-ca -keyAlias "ohos-app-root-ca" -keyPwd "ohos123456" -keyAlg "ECC" -keySize "NIST-P-256" -subject "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Root CA" -validity "3650" -signAlg "SHA256withRSA" -keystoreFile "app.p12" -keystorePwd "ohos123456" -outFile "app-root-ca.cer"
  • -keyAlias:证书的密钥别名,必填项
  • -keyPwd:证书的密钥口令,可选项
  • -keyAlg:证书的密钥算法,必填项,包括 RSA / ECC
  • -keySize:证书的密钥长度,必填项,RSA 算法的长度为 2048 / 3072 / 4096,ECC 算法的长度 NIST-P-256 / NIST-P-384
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序且字段之间要有空格
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
  • -basicConstraintsPathLen:路径长度,可选项,默认为0
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outFile:输出根证书 .cer 后缀,可选项,如果不填,则直接输出到控制台

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

3.生成应用中间证书

java -jar hap-sign-tool.jar generate-ca -keyAlias "ohos-app-sub-ca" -keyPwd "ohos123456" -keyAlg "ECC" -keySize "NIST-P-256" -issuer "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Root CA" -issuerKeyAlias "ohos-app-root-ca" -issuerKeyPwd "ohos123456" -subject "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application CA" -validity "3650" -signAlg "SHA256withRSA" -keystoreFile "app.p12" -keystorePwd "ohos123456" -issuerKeystoreFile "app.p12" -issuerKeystorePwd "ohos123456" -outFile "app-sub-ca-application.cer"
  • -keyAlias:证书的密钥别名,必填项
  • -keyPwd:证书的密钥口令,可选项
  • -keyAlg:证书的密钥算法,必填项,包括 RSA / ECC
  • -keySize:证书的密钥长度,必填项,RSA 算法的长度为 2048 / 3072 / 4096,ECC 算法的长度 NIST-P-256 / NIST-P-384
  • -issuer:颁发者的证书主题,必填项,使用根证书的主题
  • -issuerKeyAlias:颁发者的密钥别名,必填项,使用根证书的别名
  • -issuerKeyPwd:颁发者的密钥口令,可选项,使用根证书的密钥口令
  • -issuerKeystoreFile:颁发者密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -issuerKeystorePwd:颁发者密钥库口令,可选项,使用第一步生成的密钥库口令
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序且字段之间要有空格
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
  • -basicConstraintsPathLen:路径长度,可选项,默认为0
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库
  • -outFile:输出根证书 .cer 后缀,可选项,如果不填,则直接输出到控制台

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

4.生成 Profile 中间证书

java -jar hap-sign-tool.jar generate-ca -keyAlias "ohos-app-sub-ca-profile" -keyPwd "ohos123456" -keyAlg "ECC" -keySize "NIST-P-256" -issuer "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Root CA" -issuerKeyAlias "ohos-app-root-ca" -issuerKeyPwd "ohos123456" -subject "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile CA" -validity "3650" -signAlg "SHA256withRSA" -keystoreFile "app.p12" -keystorePwd "ohos123456" -issuerKeystoreFile "app.p12" -issuerKeystorePwd "ohos123456" -outFile "app-sub-ca-profile.cer"
  • -keyAlias:证书的密钥别名,必填项
  • -keyPwd:证书的密钥口令,可选项
  • -keyAlg:证书的密钥算法,必填项,包括 RSA / ECC
  • -keySize:证书的密钥长度,必填项,RSA 算法的长度为 2048 / 3072 / 4096,ECC 算法的长度 NIST-P-256 / NIST-P-384
  • -issuer:颁发者的证书主题,必填项,使用根证书的主题
  • -issuerKeyAlias:颁发者的密钥别名,必填项,使用根证书的别名
  • -issuerKeyPwd:颁发者的密钥口令,可选项,使用根证书的密钥口令
  • -issuerKeystoreFile:颁发者密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -issuerKeystorePwd:颁发者密钥库口令,可选项,使用第一步生成的密钥库口令
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序且字段之间要有空格
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withRSA / SHA384withRSA / SHA256withECDSA / SHA384withECDSA
  • -basicConstraintsPathLen:路径长度,可选项,默认为0
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outFile:输出根证书 .cer 后缀,可选项,如果不填,则直接输出到控制台

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

5.生成应用调试/发布证书

java -jar hap-sign-tool.jar generate-app-cert -keyAlias "ohos-app" -keyPwd "ohos123456" -issuer "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application CA" -issuerKeyAlias "ohos-app-sub-ca" -issuerKeyPwd "ohos123456" -subject "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Release" -validity "3650" -signAlg "SHA256withECDSA" -issuerKeystoreFile "app.p12" -issuerKeystorePwd "ohos123456" -keystoreFile "app.p12" -keystorePwd "ohos123456" -outForm "certChain" -rootCaCertFile "app-root-ca.cer" -subCaCertFile "app-sub-ca-application.cer" -outFile "app-release.cer"
  • -keyAlias:密钥别名,必填项
  • -keyPwd:密钥口令,可选项
  • -issuer:颁发者的证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序,使用应用中间证书的主题
  • -issuerKeyAlias:颁发者的密钥别名,必填项,使用应用中间证书的别名
  • -issuerKeyPwd:颁发者的密钥口令,可选项,使用应用中间证书的密钥口令
  • -issuerKeystoreFile:颁发者密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -issuerKeystorePwd:颁发者密钥库口令,可选项,使用第一步生成的密钥库口令
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序且字段之间要有空格
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outForm:输出证书文件的格式,包括 cert / certChain,可选项,默认为 certChain
  • -rootCaCertFile:outForm 为 certChain 时必填,根CA证书文件
  • -subCaCertFile:outForm 为 certChain 时必填,中间CA证书文件
  • -outFile:输出证书 .cer 后缀,可选项,如果不填,则直接输出到控制台

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

5.1.修改 Profile 配置模板文件

  1. 修改 bundle-name 为自己的应用包名

  2. 将生成的 应用调试/发布证书 中第一部分的密钥,把 回车换行 转换为 \n 字符,填入 distribution-certificate 字段。例如:

转换前:

-----BEGIN CERTIFICATE-----
MIICQjCCAeigAwIBAgIEWkv3vTAKBggqhkjOPQQDAjBwMQswCQYDVQQGEwJDTjEX
MBUGA1UECgwOZ3VvZG9uZ0FuZHJvaWQxIDAeBgNVBAsMF2d1b2RvbmdBbmRyb2lk
IFBlcnNvbmFsMSYwJAYDVQQDDB1ndW9kb25nQW5kcm9pZCBBcHBsaWNhdGlvbiBD
QTAeFw0yMzA2MzAwMjAzMTRaFw0zMzA2MjcwMjAzMTRaMHUxCzAJBgNVBAYTAkNO
MRcwFQYDVQQKDA5ndW9kb25nQW5kcm9pZDEgMB4GA1UECwwXZ3VvZG9uZ0FuZHJv
aWQgUGVyc29uYWwxKzApBgNVBAMMImd1b2RvbmdBbmRyb2lkIEFwcGxpY2F0aW9u
IFJlbGVhc2UwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATxgPq9FUEZnVmkGLNL
mcO+8B21uc6LImVas5fFGSl1u8AR2twi/cLXrbsgbCHlvtFRNO22Kh+P/+sBEIBv
fEDOo2swaTAdBgNVHQ4EFgQUJl8bhoz0vZYTmYPVyMWc1oI6Yi8wCQYDVR0TBAIw
ADAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGAYMKwYBBAGP
WwKCeAEDBAgwBgIBAQoBADAKBggqhkjOPQQDAgNIADBFAiASR/wpJOIvloWZCXjt
zmNavSvVLZTLTNHhwTjieI9GXgIhANygi7YxJ4V5r+Rxt+lqg/dbgXu7fEUwKg4x
B7BsLGdY
-----END CERTIFICATE-----

转换后:

-----BEGIN CERTIFICATE-----\nMIICQjCCAeigAwIBAgIEWkv3vTAKBggqhkjOPQQDAjBwMQswCQYDVQQGEwJDTjEX\nMBUGA1UECgwOZ3VvZG9uZ0FuZHJvaWQxIDAeBgNVBAsMF2d1b2RvbmdBbmRyb2lk\nIFBlcnNvbmFsMSYwJAYDVQQDDB1ndW9kb25nQW5kcm9pZCBBcHBsaWNhdGlvbiBD\nQTAeFw0yMzA2MzAwMjAzMTRaFw0zMzA2MjcwMjAzMTRaMHUxCzAJBgNVBAYTAkNO\nMRcwFQYDVQQKDA5ndW9kb25nQW5kcm9pZDEgMB4GA1UECwwXZ3VvZG9uZ0FuZHJv\naWQgUGVyc29uYWwxKzApBgNVBAMMImd1b2RvbmdBbmRyb2lkIEFwcGxpY2F0aW9u\nIFJlbGVhc2UwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATxgPq9FUEZnVmkGLNL\nmcO+8B21uc6LImVas5fFGSl1u8AR2twi/cLXrbsgbCHlvtFRNO22Kh+P/+sBEIBv\nfEDOo2swaTAdBgNVHQ4EFgQUJl8bhoz0vZYTmYPVyMWc1oI6Yi8wCQYDVR0TBAIw\nADAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGAYMKwYBBAGP\nWwKCeAEDBAgwBgIBAQoBADAKBggqhkjOPQQDAgNIADBFAiASR/wpJOIvloWZCXjt\nzmNavSvVLZTLTNHhwTjieI9GXgIhANygi7YxJ4V5r+Rxt+lqg/dbgXu7fEUwKg4x\nB7BsLGdY\n-----END CERTIFICATE-----\n

6.生成 Profile 调试/发布证书

6.1.生成调试证书

java -jar hap-sign-tool.jar generate-profile-cert -keyAlias "ohos-app-sub-ca-profile" -keyPwd "ohos123456" -issuer "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile CA" -issuerKeyAlias "ohos-app-sub-ca-profile" -issuerKeyPwd "ohos123456" -subject "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile Debug" -validity "3650" -signAlg "SHA256withECDSA" -issuerKeystoreFile "app.p12" -issuerKeystorePwd "ohos123456" -keystoreFile "app.p12" -keystorePwd "ohos123456" -outForm "certChain" -rootCaCertFile "app-root-ca.cer" -subCaCertFile "app-sub-ca-profile.cer" -outFile "app-profile-debug.pem"
  • -keyAlias:密钥别名,必填项,使用 Profile 中间证书的密钥别名
  • -keyPwd:密钥口令,可选项,使用 Profile 中间证书的密钥别名口令
  • -issuer:颁发者的证书主题,必填项,使用 Profile 中间证书的主题
  • -issuerKeyAlias:颁发者的密钥别名,必填项,使用 Profile 中间证书的别名
  • -issuerKeyPwd:颁发者的密钥口令,可选项,使用 Profile 中间证书的密钥口令
  • -issuerKeystoreFile:颁发者密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -issuerKeystorePwd:颁发者密钥库口令,可选项,使用第一步生成的密钥库口令
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序且字段之间要有空格
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outForm:输出证书文件的格式,包括 cert / certChain,可选项,默认为 certChain
  • -rootCaCertFile:outForm 为 certChain 时必填,根CA证书文件
  • -subCaCertFile:outForm 为 certChain 时必填,中间CA证书文件
  • -outFile:输出证书 .pem 后缀,可选项,如果不填,则直接输出到控制台

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

6.2.生成发布证书

java -jar hap-sign-tool.jar generate-profile-cert -keyAlias "ohos-app-sub-ca-profile" -keyPwd "ohos123456" -issuer "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile CA" -issuerKeyAlias "ohos-app-sub-ca-profile" -issuerKeyPwd "ohos123456" -subject "C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile Release" -validity "3650" -signAlg "SHA256withECDSA" -issuerKeystoreFile "app.p12" -issuerKeystorePwd "ohos123456" -keystoreFile "app.p12" -keystorePwd "ohos123456" -outForm "certChain" -rootCaCertFile "app-root-ca.cer" -subCaCertFile "app-sub-ca-profile.cer" -outFile "app-profile-release.pem"
  • -keyAlias:密钥别名,必填项,使用 Profile 中间证书的密钥别名
  • -keyPwd:密钥口令,可选项,使用 Profile 中间证书的密钥别名口令
  • -issuer:颁发者的证书主题,必填项,使用 Profile 中间证书的主题
  • -issuerKeyAlias:颁发者的密钥别名,必填项,使用 Profile 中间证书的别名
  • -issuerKeyPwd:颁发者的密钥口令,可选项,使用 Profile 中间证书的密钥口令
  • -issuerKeystoreFile:颁发者密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -issuerKeystorePwd:颁发者密钥库口令,可选项,使用第一步生成的密钥库口令
  • -subject:证书主题,必填项,详细字段见附录证书主题字段含义,必须按 C、O、OU、CN 顺序且字段之间要有空格
  • -validity:证书有效期,可选项,默认为3650天
  • -signAlg:签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outForm:输出证书文件的格式,包括 cert / certChain,可选项,默认为 certChain
  • -rootCaCertFile:outForm 为 certChain 时必填,根CA证书文件
  • -subCaCertFile:outForm 为 certChain 时必填,中间CA证书文件
  • -outFile:输出证书 .pem 后缀,可选项,如果不填,则直接输出到控制台

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

7.签名 Profile 配置文件

本例是签名发布版本的 Profile 配置文件

java -jar hap-sign-tool.jar sign-profile -keyAlias "ohos-app-sub-ca-profile" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "app-profile-release.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "app.p12" -outFile "app-profile-release.p7b" -keyPwd "ohos123456" -keystorePwd "ohos123456"
  • -keyAlias:密钥别名,必填项,Profile 证书的密钥别名
  • -keyPwd:密钥口令,可选项,Profile 证书的密钥别名口令
  • -signAlg:签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
  • -mode:签名模式,必填项,目前仅支持 localSign
  • -profileCertFile:Profile 证书,必填项
  • -inFile:原始的模板 Profile 文件,必填项,文件为 json 格式
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outFile:输出证书 .p7b 后缀,必填项

8.签名 Hap 包

java -jar hap-sign-tool.jar sign-app -keyAlias "ohos-app" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "app-release.cer" -profileFile "app-profile-release.p7b" -inFile "entry-default-unsigned.hap" -keystoreFile "app.p12" -outFile "app-release-signed.hap" -keyPwd "ohos123456" -keystorePwd "ohos123456"
  • -keyAlias:密钥别名,必填项,使用第一步生成的密钥别名
  • -keyPwd:密钥口令,可选项,使用第一步生成的密钥别名口令
  • -signAlg:签名算法,必填项,包括 SHA256withECDSA / SHA384withECDSA
  • -mode:签名模式,必填项,目前仅支持 localSign
  • -appCertFile:应用证书,必填项,使用第五步生成的应用证书
  • -profileFile:签名后的 Profile 证书,必填项,使用第七步生成的 p7b 格式证书
  • -inFile:原始 Hap 包文件,必填项,
  • -keystoreFile:密钥库文件,必填项,JKS / P12 格式,使用第一步生成的密钥库
  • -keystorePwd:密钥库口令,可选项,使用第一步生成的密钥库口令
  • -outFile:输出签名后的包文件,必填项

配置系统证书文件

导出配置文件

系统证书配置文件位于:/etc/security/ 目录下

通过 hdc file recv 命令将 trusted_apps_sources.jsontrusted_root_ca.json 两个文件导出到本地,方便修改

配置 trusted_apps_sources

打开 trusted_app_sources.json 文件,在 trusted_app_source 字段中新增一个 JSONObject

{
    "name":"guodongAndroid apps",
    "app-signing-cert":"C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Release",
    "profile-signing-certificate":"C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile Release",
    "profile-debug-signing-certificate":"C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile Debug",
    "issuer-ca":"C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Profile CA",
    "max-certs-path":3,
    "critialcal-cert-extension":["keyusage"]
}
  • name:随意取
  • app-signing-cert:生成应用证书时主题的值
  • profile-signing-certificate:生成 Profile 发布证书时主题的值
  • profile-debug-signing-certificate:生成 Profile 调试证书时主题的值
  • issuer-ca:生成 Profile 中间证书时主题的值
  • max-certs-path:证书最大路径,默认3,克隆已有的配置
  • critialcal-cert-extension:克隆已有的配置

配置 trusted_root_ca

把生成的根证书的密钥信息经过 \n 转换后加入到文件中,以根证书的主题为键,密钥为值:

"C=CN, O=guodongAndroid, OU=guodongAndroid Personal, CN=guodongAndroid Application Root CA":"-----BEGIN CERTIFICATE-----\nMIICITCCAcegAwIBAgIECklxbDAKBggqhkjOPQQDAjB1MQswCQYDVQQGEwJDTjEX\nMBUGA1UECgwOZ3VvZG9uZ0FuZHJvaWQxIDAeBgNVBAsMF2d1b2RvbmdBbmRyb2lk\nIFBlcnNvbmFsMSswKQYDVQQDDCJndW9kb25nQW5kcm9pZCBBcHBsaWNhdGlvbiBS\nb290IENBMB4XDTIzMDYzMDAyMDExOFoXDTMzMDYyNzAyMDExOFowdTELMAkGA1UE\nBhMCQ04xFzAVBgNVBAoMDmd1b2RvbmdBbmRyb2lkMSAwHgYDVQQLDBdndW9kb25n\nQW5kcm9pZCBQZXJzb25hbDErMCkGA1UEAwwiZ3VvZG9uZ0FuZHJvaWQgQXBwbGlj\nYXRpb24gUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNI7IucIdtR7\ncZKHPQC/BQI1KEe7obSKuKlRrdL+kj5pkKC5SW/4iZXZDnrGsfoa4tULnhjD5NYU\ndU9fKVkhLyqjRTBDMB0GA1UdDgQWBBRQr2AJeWo1ETROOWyv86L0np6YYzASBgNV\nHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNIADBF\nAiEAs19ruk+VUwWPgcVN7bLs8pzkUmDR0cJNJBkX5+7sJakCIFsnL6PLka87WbYX\np8xU+XCKlBwReTmyakg8tttcxXL6\n-----END CERTIFICATE-----\n"

导入配置文件

导入配置文件需要先 remount 重新挂载分区为可读写,通过以下命令导入配置文件:

hdc shell "mount -o remount,rw /"
hdc file send trusted_apps_sources.json /etc/security/trusted_apps_sources.json
hdc file send trusted_root_ca.json /etc/security/trusted_root_ca.json

重启设备

hdc shell reboot

安装签名应用

hdc install .\app-release-signed.hap
[Info]App install path: app-release-signed.hap, queuesize:0, msg:install bundle successfully.
AppMod finish

配置 IDE 签名

生成的签名文件:

  • app.p12:自己的密钥库
  • app-release.cer:应用证书
  • app-release-profile.p7b:签名后的 profile 文件

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

参考文档

OpenHarmony应用签名 - 厂商私有签名open in new window

附录

证书主题中字段的含义

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