OpenHarmony | 生成私有签名
前言
在 OpenHarmony | 手动生成IDE所需签名文件 的折腾过程中,一直想生成自己的签名文件,使用自己的签名文件对 Hap 包进行签名然后安装,可惜一直没有成功,最近在网上看到这篇文章 OpenHarmony应用签名 - 厂商私有签名,跟着文章中的步骤加上自己试错,终于可以生成自己的签名文件并安装成功,遂记录一下此过程。
开发环境
操作系统: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
准备资源
hap-sign-tool.jar:签名工具,可以从 SDK 中获取:
SDK\OpenHarmony\9\toolchains\lib
可以在官网 Hap包签名工具指导 了解签名工具使用说明
UnsgnedReleasedProfileTemplate.json:Profile 配置文件模板,可以从 SDK 中获取:
SDK\OpenHarmony\9\toolchains\lib
可以在官网 HarmonyAppProvision配置文件的说明 了解配置文件说明
签名文件
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、keyStorePwd 和 keyPwd 的值,在后续的操作中会使用到
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、keyPwd 和 subject 的值,在后续的操作中会使用到
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、keyPwd 和 subject 的值,在后续的操作中会使用到
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、keyPwd 和 subject 的值,在后续的操作中会使用到
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 配置模板文件
修改
bundle-name
为自己的应用包名将生成的 应用调试/发布证书 中第一部分的密钥,把 回车换行 转换为
\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、keyPwd 和 subject 的值,在后续的操作中会使用到
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、keyPwd 和 subject 的值,在后续的操作中会使用到
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.json
和 trusted_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 中,重新编译运行。
参考文档
附录
证书主题中字段的含义
中文字段 | 英文字段 | 简称 | 字段描述 |
---|---|---|---|
公用名称 | Common Name | CN | 对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端证书则为证书申请者的姓名; |
单位名称 | Organization Name | O | 对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称; |
所在城市 | Locality | L | |
所在省份 | State/Provice | S | |
所在国家 | Country | C | 只能是国家字母缩写,如中国:CN |
电子邮件 | E | ||
多个姓名字段 | G | ||
介绍 | Description | ||
电话号码 | Phone | 格式要求: +国家区号 城市区号 电话号码,如: +86 732 88888888 | |
地址 | STREET | ||
邮政编码 | PostalCode | ||
其他内容 | OU |