OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用
概述
文檔環(huán)境
- 開發(fā)環(huán)境:Windows 11
- DevEco Studio 版本:DevEco Studio 3.1.1 Release(3.1.0.501)
- SDK 版本:3.2.14.1(Full SDK)
- 開發(fā)板型號:DAYU 200
- 系統(tǒng)版本:OpenHarmony 3.2 Release(3.2.14.5)
- 涉及倉庫:Hap包簽名工具[developtools_hapsigner]
功能簡介
OpenHarmony應(yīng)用簽名 - 廠商私有簽名文章介紹如何生成廠商私有簽名和修改運(yùn)行系統(tǒng)中的配置文件,使私有簽名簽出的應(yīng)用可以正常在系統(tǒng)中安裝和使用。
本文我們將介紹:
- 私有簽名信息和密鑰如何在系統(tǒng)源碼中進(jìn)行配置,使系統(tǒng)原生支持私有廠商簽名簽出的應(yīng)用安裝。
- 部分的系統(tǒng)應(yīng)用是由編譯子系統(tǒng)編譯成hap裝入系統(tǒng)中,如何配置這些系統(tǒng)應(yīng)用的簽名。
- 如何使用Debug級別的簽名文件給應(yīng)用簽名。
- 廠商私有簽名如何在DevEco Studio的工程中進(jìn)行配置。
說明:本文檔使用的簽名文件和密鑰等信息已由OpenHarmony應(yīng)用簽名 - 廠商私有簽名文檔生成。
配置源碼私有簽名驗證信息
配置trusted_apps_sources.json文件,增加私有簽名信息。注意“,”符號后面需要加入空格才可正常匹配。文件源碼位置:
base/security/appverify/interfaces/innerkits/appverify/config/OpenHarmony/trusted_apps_sources.json
{
"name":"OpenHarmony-Tizi apps",
"app-signing-cert":"C=CN, O=OpenHarmony-Tizi-app-cert, OU=OpenHarmony-Tizi-app-cert Community, CN=OpenHarmony Application Release",
"profile-signing-certificate":"C=CN, O=OpenHarmony-Tizi-profile-cert, OU=OpenHarmony-Tizi-profile-cert Community, CN=OpenHarmony Application Profile Release",
"profile-debug-signing-certificate":"C=CN, O=OpenHarmony-Tizi-profile-cert, OU=OpenHarmony-Tizi-profile-cert Community, CN=OpenHarmony Application Profile Debug",
"issuer-ca":"C=CN, O=OpenHarmony-Tizi-subCA, OU=OpenHarmony-Tizi-subCA Community, CN=OpenHarmony Application CA",
"max-certs-path":3,
"critialcal-cert-extension":["keyusage"]
}
配置trusted_root_ca.json文件,將OpenHarmony-Tizi-rootCA.cer密鑰信息處理后加入到文件中。文件源碼位置:
base/security/appverify/interfaces/innerkits/appverify/config/OpenHarmony/trusted_root_ca.json
"C=CN, O=OpenHarmony-Tizi-rootCA, OU=OpenHarmony-Tizi-rootCA Community, CN=OpenHarmony Application Root CA":"-----BEGIN CERTIFICATE-----\nMIICQzCCAemgAwIBAgIEUwKY8TAKBggqhkjOPQQDAjCBhTELMAkGA1UEBhMCQ04x\nIDAeBgNVBAoMF09wZW5IYXJtb255LVRpemktcm9vdENBMSowKAYDVQQLDCFPcGVu\nSGFybW9ueS1UaXppLXJvb3RDQSBDb21tdW5pdHkxKDAmBgNVBAMMH09wZW5IYXJt\nb255IEFwcGxpY2F0aW9uIFJvb3QgQ0EwHhcNMjMwNTIxMTQwNTI2WhcNMjQwNTIw\nMTQwNTI2WjCBhTELMAkGA1UEBhMCQ04xIDAeBgNVBAoMF09wZW5IYXJtb255LVRp\nemktcm9vdENBMSowKAYDVQQLDCFPcGVuSGFybW9ueS1UaXppLXJvb3RDQSBDb21t\ndW5pdHkxKDAmBgNVBAMMH09wZW5IYXJtb255IEFwcGxpY2F0aW9uIFJvb3QgQ0Ew\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARoC3C5WijOQkLq/AjmtEWkZ+Ooso1p\nRl34qPpEPH0b6iun5wpAlDe20bcCvsiFda2RNXFsqHIl+cj59bnLh83Ro0UwQzAd\nBgNVHQ4EFgQUAIpcSDCk3q3hZ+qwobekzT9vLHAwEgYDVR0TAQH/BAgwBgEB/wIB\nADAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwIDSAAwRQIhANKbxPqFT5PwURVf\n1Oxa8cf1udcgO0ntULei/GhaQIobAiBH787oVyJtKxMuPw9K6zzhJjBNjZzW0DrK\n/NOyuKLetw==\n-----END CERTIFICATE-----\n"
重新編譯系統(tǒng)鏡像,燒錄至設(shè)備,使用私有簽名簽出的應(yīng)用安裝測試。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
配置源碼編譯應(yīng)用的簽名文件
以權(quán)限管理應(yīng)用(com.ohos.permissionmanager)為例,其他應(yīng)用可根據(jù)需求配置。
應(yīng)用源碼位置:applications/standard/permission_manager
應(yīng)用編譯信息:
// applications/standard/permission_manager/permissionmanager/BUILD.gn
ohos_hap("permission_manager") {
hap_profile = "src/main/module.json"
deps = [
":permission_manager_js_assets",
":permission_manager_resources",
]
certificate_profile = "../signature/pm.p7b"
hap_name = "permission_manager"
part_name = "prebuilt_hap"
subsystem_name = "applications"
js_build_mode = "debug"
module_install_dir = "app/com.ohos.permissionmanager"
}
使用hap-sign-tool.jar查看原權(quán)限管理應(yīng)用p7b簽名文件信息對應(yīng)的Profile簽名證書信息。
p7b文件位置:applications/standard/permission_manager/signature/pm.p7b
java -jar hap-sign-tool.jar verify-profile -inFile pm.p7b -outFil
e pm.json
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
將bundle-name、apl、app-feature和allowed-acls字段分別復(fù)制到UnsgnedReleasedProfileTemplate.json文件中。
通過文本查看的方式打開p7b文件,把a(bǔ)pp-privilege-capabilities字段信息拷貝到UnsgnedReleasedProfileTemplate.json文件中。
說明:驗簽JSON未輸出app-privilege-capabilities字段,已與開發(fā)反饋,步驟3為臨時方案,后續(xù)如有修改會進(jìn)行文檔更新。
替換distribution-certificate為私有簽名OpenHarmony-Tizi-app-cert.pem文件中第一部分的密鑰。把回車轉(zhuǎn)換為\n字符,替換UnsgnedReleasedProfileTemplate.json文件的distribution-certificate字段。例如:
轉(zhuǎn)換前:
-----BEGIN CERTIFICATE-----
MIICazCCAhGgAwIBAgIFAPERF2IwCgYIKoZIzj0EAwIwgYIxCzAJBgNVBAYTAkNO
MR8wHQYDVQQKDBZPcGVuSGFybW9ueS1UaXppLXN1YkNBMSkwJwYDVQQLDCBPcGVu
SGFybW9ueS1UaXppLXN1YkNBIENvbW11bml0eTEnMCUGA1UEAwweT3Blbkhhcm1v
bnkgQXBwbGljYXRpb24gU3ViIENBMB4XDTIzMDUyMTE0MDU0M1oXDTI0MDUyMDE0
MDU0M1owgYkxCzAJBgNVBAYTAkNOMSIwIAYDVQQKDBlPcGVuSGFybW9ueS1UaXpp
LWFwcC1jZXJ0MSwwKgYDVQQLDCNPcGVuSGFybW9ueS1UaXppLWFwcC1jZXJ0IENv
bW11bml0eTEoMCYGA1UEAwwfT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUmVsZWFz
ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN0OL1RqzWXQWCXpT0tt54aFR0Ul
7pqZYBJaCKT049xUYcfwCHLd0q0IzktNo9nqKIjE5BxOk76w7kHhxwowI2qjazBp
MB0GA1UdDgQWBBQAW6LlxgLrPko7kHS/jbcsqnh4WTAJBgNVHRMEAjAAMA4GA1Ud
DwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAYBgwrBgEEAY9bAoJ4AQME
CDAGAgEBCgEAMAoGCCqGSM49BAMCA0gAMEUCIQDHIWx4AELONvCoKaQnHQAW0bay
gjR168gmlnGfnFGowAIgfMV5/nIvmRAbpapqO3a2pBKeHFfeU5zel/T1Bgty198=
-----END CERTIFICATE-----
轉(zhuǎn)換后:
-----BEGIN CERTIFICATE-----\nMIICazCCAhGgAwIBAgIFAPERF2IwCgYIKoZIzj0EAwIwgYIxCzAJBgNVBAYTAkNO\nMR8wHQYDVQQKDBZPcGVuSGFybW9ueS1UaXppLXN1YkNBMSkwJwYDVQQLDCBPcGVu\nSGFybW9ueS1UaXppLXN1YkNBIENvbW11bml0eTEnMCUGA1UEAwweT3Blbkhhcm1v\nbnkgQXBwbGljYXRpb24gU3ViIENBMB4XDTIzMDUyMTE0MDU0M1oXDTI0MDUyMDE0\nMDU0M1owgYkxCzAJBgNVBAYTAkNOMSIwIAYDVQQKDBlPcGVuSGFybW9ueS1UaXpp\nLWFwcC1jZXJ0MSwwKgYDVQQLDCNPcGVuSGFybW9ueS1UaXppLWFwcC1jZXJ0IENv\nbW11bml0eTEoMCYGA1UEAwwfT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUmVsZWFz\nZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN0OL1RqzWXQWCXpT0tt54aFR0Ul\n7pqZYBJaCKT049xUYcfwCHLd0q0IzktNo9nqKIjE5BxOk76w7kHhxwowI2qjazBp\nMB0GA1UdDgQWBBQAW6LlxgLrPko7kHS/jbcsqnh4WTAJBgNVHRMEAjAAMA4GA1Ud\nDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAYBgwrBgEEAY9bAoJ4AQME\nCDAGAgEBCgEAMAoGCCqGSM49BAMCA0gAMEUCIQDHIWx4AELONvCoKaQnHQAW0bay\ngjR168gmlnGfnFGowAIgfMV5/nIvmRAbpapqO3a2pBKeHFfeU5zel/T1Bgty198=\n-----END CERTIFICATE-----\n
{
"version-name": "2.0.0",
"version-code": 2,
"app-distribution-type": "os_integration",
"uuid": "5027b99e-5f9e-465d-9508-a9e0134ffe18",
"validity": {
"not-before": 1594865258,
"not-after": 1689473258
},
"type": "release",
"bundle-info": {
"developer-id": "OpenHarmony",
"distribution-certificate": "-----BEGIN CERTIFICATE-----\nMIICazCCAhGgAwIBAgIFAPERF2IwCgYIKoZIzj0EAwIwgYIxCzAJBgNVBAYTAkNO\nMR8wHQYDVQQKDBZPcGVuSGFybW9ueS1UaXppLXN1YkNBMSkwJwYDVQQLDCBPcGVu\nSGFybW9ueS1UaXppLXN1YkNBIENvbW11bml0eTEnMCUGA1UEAwweT3Blbkhhcm1v\nbnkgQXBwbGljYXRpb24gU3ViIENBMB4XDTIzMDUyMTE0MDU0M1oXDTI0MDUyMDE0\nMDU0M1owgYkxCzAJBgNVBAYTAkNOMSIwIAYDVQQKDBlPcGVuSGFybW9ueS1UaXpp\nLWFwcC1jZXJ0MSwwKgYDVQQLDCNPcGVuSGFybW9ueS1UaXppLWFwcC1jZXJ0IENv\nbW11bml0eTEoMCYGA1UEAwwfT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUmVsZWFz\nZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN0OL1RqzWXQWCXpT0tt54aFR0Ul\n7pqZYBJaCKT049xUYcfwCHLd0q0IzktNo9nqKIjE5BxOk76w7kHhxwowI2qjazBp\nMB0GA1UdDgQWBBQAW6LlxgLrPko7kHS/jbcsqnh4WTAJBgNVHRMEAjAAMA4GA1Ud\nDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAYBgwrBgEEAY9bAoJ4AQME\nCDAGAgEBCgEAMAoGCCqGSM49BAMCA0gAMEUCIQDHIWx4AELONvCoKaQnHQAW0bay\ngjR168gmlnGfnFGowAIgfMV5/nIvmRAbpapqO3a2pBKeHFfeU5zel/T1Bgty198=\n-----END CERTIFICATE-----\n",
"bundle-name": "com.ohos.permissionmanager",
"apl": "normal",
"app-feature": "hos_system_app"
},
"acls": {
"allowed-acls": [
"ohos.permission.GET_SENSITIVE_PERMISSIONS",
"ohos.permission.GRANT_SENSITIVE_PERMISSIONS",
"ohos.permission.REVOKE_SENSITIVE_PERMISSIONS",
"ohos.permission.PERMISSION_USED_STATS",
"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED",
"ohos.permission.GET_BUNDLE_INFO",
"ohos.permission.MANAGE_AUDIO_CONFIG",
"ohos.permission.MANAGE_CAMERA_CONFIG"
]
},
"permissions": {
"restricted-permissions": []
},
"issuer": "pki_internal",
"app-privilege-capabilities": [
"AllowAppDesktopIconHide",
"AllowAbilityExcludeFromMissions",
"AllowAppUsePrivilegeExtension"
]
}
ProvisionProfile文件簽名,生成權(quán)限管理應(yīng)用的p7b文件。
java -jar hap-sign-tool.jar sign-profile -keyAlias "OpenHarmony-Tizi-profileCA" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmony-Tizi-profile-cert-release.pem" -inFile "UnsgnedReleasedProfileTemplate.json" -keystoreFile "OpenHarmony-Tizi.p12" -outFile "pm.p7b" -keyPwd "Pwd-Tizi-5" -keystorePwd "Pwd-Tizi-2"
將pm.p7b文件替換源碼中原p7b文件。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
修改編譯簽名信息。
通過build/ohos/app/app_internal.gni文件查看應(yīng)用簽名需要的編譯參數(shù)。
_private_key_path = default_hap_private_key_path
if (defined(private_key_path)) {
_private_key_path = private_key_path
}
_signature_algorithm = default_signature_algorithm
if (defined(signature_algorithm)) {
_signature_algorithm = signature_algorithm
}
_key_alias = default_key_alias
if (defined(key_alias)) {
_key_alias = key_alias
}
_keystore_path = default_keystore_path
if (defined(keystore_path)) {
_keystore_path = keystore_path
}
_keystore_password = default_keystore_password
if (defined(keystore_password)) {
_keystore_password = keystore_password
}
_certificate_file = default_hap_certificate_file
if (defined(certificate_file)) {
_certificate_file = certificate_file
}
默認(rèn)編譯簽名信息位于源碼位置build/ohos_var.gni。
default_hap_private_key_path = "OpenHarmony Application Release"
default_signature_algorithm = "SHA256withECDSA"
default_key_alias = "123456"
default_keystore_password = "123456"
default_keystore_path = "http://developtools/hapsigner/dist/OpenHarmony.p12"
default_hap_certificate_file =
"http://developtools/hapsigner/dist/OpenHarmonyApplication.pem"
編譯配置字段 | hap-sign-tool.jar字段 | 簽名信息 |
default_hap_private_key_path | keyAlias | OpenHarmony-Tizi-subCA |
default_signature_algorithm | signAlg | SHA256withECDSA |
default_key_alias | keyPwd | Pwd-Tizi-4 |
default_keystore_password | keystorePwd | Pwd-Tizi-2 |
default_keystore_path | keystoreFile | OpenHarmony-Tizi.p12 |
default_hap_certificate_file | appCertFile | OpenHarmony-Tizi-app-cert.pem |
說明:編譯字段default_hap_private_key_path和default_key_alias的命名與hap-sign-tool.jar字段的命名有出入,但是與build/scripts/hapbuilder.py中sign_hap函數(shù)中的取值相對應(yīng),需注意,目前已與開發(fā)反饋,后續(xù)如有修改會進(jìn)行文檔更新。
def sign_hap(hapsigner, private_key_path, sign_algo, certificate_profile,
keystore_path, keystorepasswd, keyalias, certificate_file,
unsigned_hap_path, signed_hap_path):
cmd = ['java', '-jar', hapsigner, 'sign-app']
cmd.extend(['-mode', 'localsign'])
cmd.extend(['-signAlg', sign_algo])
cmd.extend(['-keyAlias', private_key_path])
cmd.extend(['-inFile', unsigned_hap_path])
cmd.extend(['-outFile', signed_hap_path])
cmd.extend(['-profileFile', certificate_profile])
cmd.extend(['-keystoreFile', keystore_path])
cmd.extend(['-keystorePwd', keystorepasswd])
cmd.extend(['-keyPwd', keyalias])
cmd.extend(['-appCertFile', certificate_file])
cmd.extend(['-profileSigned', '1'])
cmd.extend(['-inForm','zip'])
child = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = child.communicate()
if child.returncode:
print(stdout.decode(), stderr.decode())
raise Exception("Failed to sign hap")
此處如果修改默認(rèn)簽名配置,則全部由系統(tǒng)編譯生成的應(yīng)用都需要替換p7b文件。本文檔僅替換了權(quán)限管理應(yīng)用的p7b文件,所以單獨(dú)配置權(quán)限管理應(yīng)用的編譯配置。
// applications/standard/permission_manager/permissionmanager/BUILD.gn
ohos_hap("permission_manager") {
hap_profile = "src/main/module.json"
deps = [
":permission_manager_js_assets",
":permission_manager_resources",
]
certificate_profile = "../signature/pm.p7b"
hap_name = "permission_manager"
part_name = "prebuilt_hap"
subsystem_name = "applications"
js_build_mode = "debug"
module_install_dir = "app/com.ohos.permissionmanager"
private_key_path = "OpenHarmony-Tizi-subCA" // 增加的簽名配置信息
signature_algorithm = "SHA256withECDSA" // 增加的簽名配置信息
key_alias = "Pwd-Tizi-4" // 增加的簽名配置信息
keystore_path = "http://developtools/hapsigner/dist/OpenHarmony-Tizi.p12" // 增加的簽名配置信息
keystore_password = "Pwd-Tizi-2" // 增加的簽名配置信息
certificate_file = "http://developtools/hapsigner/dist/OpenHarmony-Tizi-app-cert.pem" // 增加的簽名配置信息
}
將p12文件和pem文件放到步驟7中編譯配置的源碼目錄中。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
由于p7b文件的替換,所以預(yù)安裝配置文件中的app_signature也會被改變,需要重新生成,生成方法可以參考OpenHarmony應(yīng)用開發(fā)技巧 - 如何獲取證書指紋。
權(quán)限管理應(yīng)用生成app_signature:
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
app_signature:F433242143C463C5931D84E127DA67A6B00B02C5625C17AA2EAA77A393400A33
替換install_list_capability.json文件,權(quán)限管理應(yīng)用指紋信息。
// vendor/hihope/rk3568/preinstall-config/install_list_capability.json
{
"bundleName": "com.ohos.permissionmanager",
"app_signature": ["F433242143C463C5931D84E127DA67A6B00B02C5625C17AA2EAA77A393400A33"],
"allowAppUsePrivilegeExtension": true
},
重新編譯系統(tǒng)鏡像,燒錄至設(shè)備,查看權(quán)限管理應(yīng)用是否被正確安裝,并驗證指紋信息是否與新生成的指紋信息一致。
bm dump -n com.ohos.permissionmanager | grep finger
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
如何簽出Debug等級權(quán)限應(yīng)用
生成Debug等級的p7b文件需要用到UnsgnedDebugProfileTemplate.json和OpenHarmony-Tizi-profile-cert-debug.pem文件。
未修改的UnsgnedDebugProfileTemplate.json:
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
與Release配置文件區(qū)別在Debug配置文件增加了debug-info字段,Debug簽名需要指定安裝設(shè)備的udid。
獲取設(shè)備udid。
hdc shell "bm get --udid"
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
3BCB000C4E2B33075C2759B3A454AF51D7BFF3D2AA489879F70D829E272F03F3
配置UnsgnedDebugProfileTemplate.json文件,將設(shè)備udid和development-certificate信息配置進(jìn)文件。development-certificate的配置方式與Release配置文件相同,可以參考“配置源碼編譯應(yīng)用的簽名文件”章節(jié)的步驟4。
配置后的UnsgnedDebugProfileTemplate.json文件
{
"version-name": "2.0.0",
"version-code": 2,
"uuid": "fe686e1b-3770-4824-a938-961b140a7c98",
"validity": {
"not-before": 1610519532,
"not-after": 1705127532
},
"type": "debug",
"bundle-info": {
"developer-id": "OpenHarmony",
"development-certificate": "-----BEGIN CERTIFICATE-----\nMIICazCCAhGgAwIBAgIFAPERF2IwCgYIKoZIzj0EAwIwgYIxCzAJBgNVBAYTAkNO\nMR8wHQYDVQQKDBZPcGVuSGFybW9ueS1UaXppLXN1YkNBMSkwJwYDVQQLDCBPcGVu\nSGFybW9ueS1UaXppLXN1YkNBIENvbW11bml0eTEnMCUGA1UEAwweT3Blbkhhcm1v\nbnkgQXBwbGljYXRpb24gU3ViIENBMB4XDTIzMDUyMTE0MDU0M1oXDTI0MDUyMDE0\nMDU0M1owgYkxCzAJBgNVBAYTAkNOMSIwIAYDVQQKDBlPcGVuSGFybW9ueS1UaXpp\nLWFwcC1jZXJ0MSwwKgYDVQQLDCNPcGVuSGFybW9ueS1UaXppLWFwcC1jZXJ0IENv\nbW11bml0eTEoMCYGA1UEAwwfT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gUmVsZWFz\nZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABN0OL1RqzWXQWCXpT0tt54aFR0Ul\n7pqZYBJaCKT049xUYcfwCHLd0q0IzktNo9nqKIjE5BxOk76w7kHhxwowI2qjazBp\nMB0GA1UdDgQWBBQAW6LlxgLrPko7kHS/jbcsqnh4WTAJBgNVHRMEAjAAMA4GA1Ud\nDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAYBgwrBgEEAY9bAoJ4AQME\nCDAGAgEBCgEAMAoGCCqGSM49BAMCA0gAMEUCIQDHIWx4AELONvCoKaQnHQAW0bay\ngjR168gmlnGfnFGowAIgfMV5/nIvmRAbpapqO3a2pBKeHFfeU5zel/T1Bgty198=\n-----END CERTIFICATE-----\n",
"bundle-name": "com.openharmony.signtest",
"apl": "normal",
"app-feature": "hos_normal_app"
},
"acls": {
"allowed-acls": [
""
]
},
"permissions": {
"restricted-permissions": [
""
]
},
"debug-info": {
"device-ids": [
"3BCB000C4E2B33075C2759B3A454AF51D7BFF3D2AA489879F70D829E272F03F3"
],
"device-id-type": "udid"
},
"issuer": "pki_internal"
}
說明:如果不配置udid,在應(yīng)用安裝時報錯,error: failed to install bundle. error: signature verification failed due to not trusted app source.
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
ProvisionProfile文件簽名,注意需使用OpenHarmony-Tizi-profile-cert-debug.pem配合UnsgnedDebugProfileTemplate.json進(jìn)行簽名。
java -jar hap-sign-tool.jar sign-profile -keyAlias "OpenHarmony-Tizi-profileCA" -signAlg "SHA256withECDSA" -mode "localSign" -profileCertFile "OpenHarmony-Tizi-profile-cert-debug.pem" -inFile "UnsgnedDebugProfileTemplate.json" -keystoreFile "OpenHarmony-Tizi.p12" -outFile "com.openharmony.signtest.debug.p7b" -keyPwd "Pwd-Tizi-5" -keystorePwd "Pwd-Tizi-2"
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
hap應(yīng)用包簽名,appCertFile參數(shù)與Release版本簽名不變,profileFile使用Debug簽出的p7b文件。
java -jar hap-sign-tool.jar sign-app -keyAlias "OpenHarmony-Tizi-subCA" -signAlg "SHA256withECDSA" -mode "localSign" -appCertFile "OpenHarmony-Tizi-app-cert.pem" -profileFile "com.openharmony.signtest.debug.p7b" -inFile "entry-default-unsigned.hap" -keystoreFile "OpenHarmony-Tizi.p12" -outFile "entry-default-signed-debug.hap" -keyPwd "Pwd-Tizi-4" -keystorePwd "Pwd-Tizi-2"
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
安裝應(yīng)用。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
DevEco Studio配置廠商私有簽名
以com.openharmony.signtest工程為例。
在工程根路徑創(chuàng)建signature文件夾,把應(yīng)用簽名所需文件放入此文件夾下,包括OpenHarmony-Tizi-app-cert.pem、OpenHarmony-Tizi.p12和com.openharmony.signtest.p7b文件。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
更改OpenHarmony-Tizi-app-cert.pem后綴為cer。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
單擊File > Project Structure > Project > SigningConfigs進(jìn)入簽名配置界面,如果勾選Automatically generate signature則需取消勾選。選取簽名文件和配置密鑰,點(diǎn)擊OK保存配置。
Store file(*.p12):OpenHarmony-Tizi.p12
Store password:Pwd-Tizi-2
Key alias:OpenHarmony-Tizi-subCA
Key password:Pwd-Tizi-4
Sign alg:SHA256withECDSA
Profile file(*.p7b):com.openharmony.signtest.p7b
Certpath file(*.cer):OpenHarmony-Tizi-app-cert.cer
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)
構(gòu)建安裝驗證。
OpenHarmony應(yīng)用簽名 - 廠商私有簽名的配置和使用-開源基礎(chǔ)軟件社區(qū)