OpenHarmony 签名过程分析与自定义签名指南

OpenHarmony 签名过程分析与自定义签名指南

分析版本:OpenHarmony Master (2026-03)
源码路径:/home/xc/code/os/ohos_master


一、OpenHarmony 签名过程分析和验签分析

1.1 签名整体架构

OpenHarmony 应用签名采用双层签名机制:

┌─────────────────────────────────────────────────────────────────┐
│                      开发阶段:签名工具                            │
│                                                                 │
│  ┌────────────────────┐         ┌────────────────────────────┐ │
│  │ Unsigned Profile   │ sign-   │ OpenHarmonyProfileRelease  │ │
│  │ (JSON 模板)         │ profile │ .pem (Profile 证书)         │ │
│  └────────┬───────────┘    →    └──────────┬─────────────────┘ │
│           │                               │                    │
│           │ HapUtils.java                 │                    │
│           │ (app-identifier 计算)          │                    │
│           │                               ▼                    │
│           │                      ┌─────────────────────┐       │
│           │                      │  OpenHarmony.p12    │       │
│           │                      │  (密钥库,含私钥)     │       │
│           │                      └──────────┬──────────┘       │
│           │                                 │                  │
│           ▼                                 ▼                  │
│  ┌──────────────────────────────────────────────────────┐     │
│  │           hap-sign-tool.jar  sign-profile            │     │
│  │                      (CMS PKCS#7 签名)                  │     │
│  └──────────────────────────┬───────────────────────────┘     │
│                             ▼                                  │
│                      ┌────────────┐                           │
│                      │  *.p7b      │  (签名后的 Provision)     │
│                      │  (CMS 包)    │                           │
│                      └─────┬──────┘                           │
└────────────────────────────┼───────────────────────────────────┘
                             │
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│                      安装阶段:设备验签                           │
│                                                                 │
│                      ┌────────────┐                            │
│                      │  *.p7b     │                            │
│                      └─────┬──────┘                            │
│                            │                                    │
│  ┌─────────────────────────┼───────────────────────────────┐  │
│  │ hap_verify.cpp          ▼                                │  │
│  │ HapVerifyImpl()         ┌───────────────────────────┐   │  │
│  │             ┌───────────│ ProvisionVerify::Verify  │   │  │
│  │             │           └───────────────────────────┘   │  │
│  │             │                  │                         │  │
│  │             │      ┌───────────┴───────────┐            │  │
│  │             │      ▼                       ▼            │  │
│  │             │  解析 .p7b              验证证书链           │  │
│  │             │  (CMS PKCS#7)       RootCA→SubCA→Profile  │  │
│  │             │      │                       │            │  │
│  │             │      │  提取 bundle-info     │            │  │
│  │             │      │  (bundle-name,        │            │  │
│  │             │      │   app-feature, apl)   │            │  │
│  │             │      │                       │            │  │
│  │             │      └───────────┬───────────┘            │  │
│  │             │                  ▼                         │  │
│  │             │  ┌────────────────────────────┐           │  │
│  │             ├──│ HapVerifyV2::Verify        │           │  │
│  │             │  │  · app-identifier 匹配      │           │  │
│  │             │  │  · app-feature 验证         │           │  │
│  │             │  │  · APL 权限级别校验          │           │  │
│  │             │  │  · ACL 授权权限校验          │           │  │
│  │             │  └────────────────────────────┘           │  │
│  │             │                                            │  │
│  │             │  ┌────────────────────────────┐           │  │
│  │             └──│ CertificateVerify::Verify  │           │  │
│  │                │  · 应用证书链验证            │           │  │
│  │                │  · 证书有效期检查            │           │  │
│  │                └────────────────────────────┘           │  │
│  │                                                       │  │
│  │  ┌─────────────────────────────────────────────┐     │  │
│  │  │ HapSigningBlockUtils::ParseSignatureBlock  │     │  │
│  │  │  · HapInfoSegment      (HAP 基本信息)       │     │  │
│  │  │  · CodeSignBlock       (代码签名)          │     │  │
│  │  │  · NativeLibInfoSegment (原生库信息)        │     │  │
│  │  └─────────────────────────────────────────────┘     │  │
│  └─────────────────────────────────────────────────────┘  │
│                             │                                │
│                             ▼                                │
│                    ┌────────────────┐                       │
│                    │ 验签结果: 允许/拒绝安装 │                   │
│                    └────────────────┘                       │
└─────────────────────────────────────────────────────────────┘

第一步: sign-profile   (签名 Profile / Provision)
  Unsigned Profile JSON → P7b (CMS 签名包)

第二步: sign-app       (签名 HAP)
  Unsigned HAP + App Cert + P7b → Signed HAP

签名的核心工具是 hap-sign-tool.jar(位于 developtools/hapsigner/)。

1.2 签名核心文件位置

|| 路径 | 用途 |
||------|------|
|| developtools/hapsigner/autosign/ | 自动签名脚本和配置 |
|| developtools/hapsigner/hapsigntool/ | 签名工具 Java 源码 |
|| prebuilts/ohos-sdk/linux/26/toolchains/lib/hap-sign-tool.jar | 编译好的签名工具 |
|| base/security/appverify/ | 运行时验签模块 (C++) |

1.3 两步签名流程详解

第一步:签名 Profile(生成 .p7b)

Profile 是应用的元数据配置文件,包含应用的基本信息、权限声明、签名信息等。

命令:

java -jar hap-sign-tool.jar sign-profile \
  -keyAlias "openharmony application profile release" \
  -signAlg "SHA256withECDSA" \
  -mode "localSign" \
  -profileCertFile OpenHarmonyProfileRelease.pem \
  -inFile <unsigned_profile.json> \
  -keystoreFile OpenHarmony.p12 \
  -outFile openharmony.p7b \
  -keyPwd 123456 \
  -keystorePwd 123456

输入的 Profile JSON 模板结构(UnsgnedReleasedProfileTemplate.json):

{
    "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-----\n...\n-----END CERTIFICATE-----\n",
        "bundle-name": "com.ohos.settings",
        "apl": "system_core",
        "app-feature": "hos_system_app"
    },
    "acls": {
        "allowed-acls": [
            "ohos.permission.LISTEN_BUNDLE_CHANGE",
            "ohos.permission.INSTALL_BUNDLE"
        ]
    },
    "permissions": {
        "restricted-permissions": []
    },
    "issuer": "pki_internal"
}

第二步:签名 HAP(使用 .p7b)

java -jar hap-sign-tool.jar sign-app \
  -keyAlias "openharmony application release" \
  -signAlg "SHA256withECDSA" \
  -mode "localSign" \
  -appCertFile OpenHarmonyApplication.pem \
  -profileFile openharmony.p7b \
  -inFile <unsigned.hap> \
  -keystoreFile OpenHarmony.p12 \
  -outFile <signed.hap> \
  -keyPwd 123456 \
  -keystorePwd 123456

1.4 证书链结构

OpenHarmony 采用三级证书链:

Root CA (rootCA.cer)
    ├── 自签名
    └── CN=OpenHarmony Application Root CA

    └── Sub CA (subCA.cer)
            ├── 由 Root CA 签发
            └── CN=OpenHarmony Application CA

            └── Application Certificate (OpenHarmonyApplication.pem)
                    ├── 由 Sub CA 签发
                    └── 用于签名 HAP 包体

            └── Profile Certificate (OpenHarmonyProfileRelease.pem)
                    ├── 由 Sub CA 签发
                    └── 用于签名 .p7b Provision 文件

签名的密钥库文件:

  • OpenHarmony.p12 — PKCS#12 密钥库,包含私钥
  • rootCA.cer — 根证书
  • subCA.cer — 子证书
  • OpenHarmonyApplication.pem — 应用证书
  • OpenHarmonyProfileRelease.pem — Profile 签名证书

附:.pem 与 .cer 的关系

.pem.cer 本质上是相同的东西——都是 X.509 证书,只是格式约定不同:

.pem .cer
编码方式 PEM(Base64 + 头尾标记,可读文本) DER(二进制)或 PEM
内容示例 -----BEGIN CERTIFICATE-----\nMIIC...\n-----END CERTIFICATE----- 二进制或同样的 PEM 文本
OpenSSL 读取 openssl x509 -in file.pem -text openssl x509 -in file.cer -text(自动识别)

核心区别

  • .p12 — PKCS#12,含私钥的密钥库
  • .pem / .cer不含私钥,仅含公钥证书,用于验证签名

两者可以互相改名使用,内容完全等价。OpenHarmony 中的命名惯例:

  • 密钥库 → .p12
  • 证书 → .pem / .cer(混用,工具均能识别)
  • 签名包 → .p7b

1.5 HAP 文件格式(签名块结构)

HAP 本质是 ZIP 格式,包含 4 个区段:

[Zip Entry Contents]           ← 应用的代码和资源
        ↓
[HAP Signatures Block]        ← 签名数据(核心)
        ↓
[Central Directory]           ← ZIP 目录
        ↓
[End of Central Directory]    ← ZIP 结束标记

签名块魔数(Magic Number):

版本 LOW HIGH
新版 7451613641622775868 4497797983070462062
旧版 2334950737560224072 3617552046287187010

签名块包含的 Segment:

Segment 说明
HapInfoSegment HAP 基本信息
CodeSignBlock 代码签名块(ELF/Machine Code 签名)
NativeLibInfoSegment 原生库信息

1.6 Provision (Profile) 关键字段说明

Profile 是 .p7b 签名包中的核心元数据,包含以下关键字段:

字段 说明 示例值
type 构建类型 "debug" / "release"
bundle-name 应用包名 "com.ohos.settings"
developer-id 开发者标识 "OpenHarmony"
app-feature 应用类型 "hos_system_app" / "hos_normal_app"
apl 权限级别 "system_core" / "system_basic" / "normal"
app-identifier 应用唯一标识(32字符) "5765880207854616753"
distribution-certificate 分发证书(PEM 格式) "-----BEGIN CERTIFICATE-----\n..."
validity.not-before 生效时间戳 1594865258
validity.not-after 失效时间戳 1689473258
allowed-acls 授权的 ACL 权限列表 ["ohos.permission.INSTALL_BUNDLE", ...]

app-feature 两种值:

含义
hos_system_app 系统应用(随系统镜像发布)
hos_normal_app 普通应用(应用市场安装)

apl(Ability Privilege Level)三种值:

权限级别 说明
normal Normal 普通应用权限
system_basic System Basic 系统基础应用权限
system_core System Core 系统核心应用权限(最高)

1.7 运行时验签流程

验签模块位于 base/security/appverify/(C++ 实现)。

验签入口

base/security/appverify/interfaces/innerkits/appverify/src/interfaces/hap_verify.cpp

验签模块结构

文件 职责
hap_signing_block_utils.cpp 定位和解析 HAP 中的签名块
hap_profile_verify_utils.cpp 验证 Profile 内容合法性
hap_cert_verify_openssl_utils.cpp 用 OpenSSL 验证证书链
hap_verify_hitls_utils.cpp 用 HITLS(华为 TLS)验证证书链
provision/provision_verify.h Provision 结构体验证
trusted_root_ca.cpp 可信根证书管理
trusted_source_manager.cpp 可信源管理器
trusted_ticket_manager.cpp Ticket 票据管理
hap_crl_manager.cpp 证书吊销列表管理

验签流程图

HAP File
    │
    ├─→ HapSigningBlockUtils::FindHapSignature()
    │       定位 ZIP EOCD → Central Directory → 签名块
    │
    ├─→ HapSigningBlockUtils::ParseSignatureBlock()
    │       解析签名块结构
    │       ├── HapInfoSegment      (HAP基本信息)
    │       ├── CodeSignBlock       (代码签名)
    │       └── NativeLibInfoSegment (原生库信息)
    │
    ├─→ HapVerifyImpl()
    │       │
    │       ├─→ ProvisionVerify::VerifyProvision()
    │       │       ├─→ 解析 .p7b (CMS PKCS#7 签名)
    │       │       ├─→ 验证证书链 (Root CA → Sub CA → Profile Cert)
    │       │       ├─→ 验证签名
    │       │       ├─→ 提取 bundle-info
    │       │       └─→ 检查 validity 时间范围
    │       │
    │       ├─→ CertificateVerify::VerifyCertificate()
    │       │       ├─→ 验证应用证书链
    │       │       └─→ 检查证书有效期
    │       │
    │       └─→ HapVerifyV2::Verify()
    │               ├─→ app-identifier 匹配检查
    │               ├─→ app-feature 验证 (system vs normal)
    │               ├─→ APL 权限级别校验
    │               └─→ ACL 授权权限校验
    │
    └─→ 验签结果: 允许安装 / 拒绝安装

App-Identifier 的解析逻辑

关键代码在 HapUtils.java

public static String getAppIdentifier(String profileContent) {
    Pair<String, String> resultPair = parseAppIdentifier(profileContent);
    String ownerID = resultPair.getFirst();      // app-identifier
    String profileType = resultPair.getSecond(); // debug / release

    if ("debug".equals(profileType)) {
        return HAP_DEBUG_OWNER_ID;  // "DEBUG_LIB_ID"
    } else if ("release".equals(profileType)) {
        return ownerID;             // 实际 32 字符 app-identifier
    }
}

1.8 系统应用签名示例:settings.p7b

applications/standard/settings/signature/settings.p7b 是 Settings 系统应用的 Provision 签名包。

从中提取的明文内容:

{
  "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-----\nMIICFTCCAZugAwIBAgIIZse0c5GblV4w...\n-----END CERTIFICATE-----\n",
    "bundle-name": "com.ohos.settings",
    "apl": "system_core",
    "app-feature": "hos_system_app"
  },
  "acls": {
    "allowed-acls": [
      "ohos.permission.LISTEN_BUNDLE_CHANGE",
      "ohos.permission.WRITE_ACCESSIBILITY_CONFIG",
      "ohos.permission.INSTALL_BUNDLE",
      "ohos.permission.INTERACT_ACROSS_LOCAL_ACCOUNTS_EXTENSION",
      "ohos.permission.MANAGE_WIFI_CONNECTION",
      "ohos.permission.GET_WIFI_INFO_INTERNAL",
      "ohos.permission.GET_WIFI_PEERS_MAC",
      "ohos.permission.START_INVISIBLE_ABILITY",
      "ohos.permission.GET_INSTALLED_BUNDLE_LIST"
    ]
  },
  "permissions": {
    "restricted-permissions": []
  },
  "issuer": "pki_internal"
}

关键观察:

  • app-feature: hos_system_app — 声明为系统应用
  • apl: system_core — 系统核心权限级别
  • app-distribution-type: os_integration — OS 集成分发类型

二、如何自定义系统签名

2.1 签名工具准备

方式一:使用预编译的 jar

# SDK 自带
ls prebuilts/ohos-sdk/linux/26/toolchains/lib/hap-sign-tool.jar

# 源码中的
ls developtools/hapsigner/dist/hap-sign-tool.jar

方式二:从源码编译

cd developtools/hapsigner/hapsigntool/hap_sign_tool
./gradlew build
# 产物在 build/libs/hap-sign-tool.jar

签名脚本位置

developtools/hapsigner/autosign/
├── autosign.py                           # Python 签名主脚本
├── autosign.config                        # 通用配置文件
├── createAppCertAndProfile.config         # OpenHarmony 官方证书配置
├── UnsgnedReleasedProfileTemplate.json    # Provision 模板
├── create_root.sh                         # Step1: 创建根证书
├── create_appcert_sign_profile.sh          # Step2: 创建应用证书 + 签名 p7b
├── sign_hap.sh                            # Step3: 给 HAP 签名
└── result/                               # 生成的证书和签名文件
    ├── OpenHarmony.p12
    ├── rootCA.cer
    ├── subCA.cer
    └── OpenHarmonyProfileRelease.pem

2.2 创建自定义证书链(三步完成)

Step 1: 创建根 CA 和子 CA

cd developtools/hapsigner/autosign

# 编辑自定义配置文件 my_custom.config
cat > my_custom.config << 'CONFIG'
config.signtool=../hapsigntool/hap_sign_tool/build/libs/hap-sign-tool.jar
config.targetDir=my_result

# 密钥库配置
common.keystoreFile=mycompany.p12
common.keystorePwd=MyStrongPassword
common.keyAlg=ECC
common.keySize=NIST-P-256
common.signAlg=SHA256withECDSA
common.validity=3650
common.outForm=certChain
common.mode=localSign
common.keyPwd=MyStrongPassword
common.issuerKeyPwd=MyStrongPassword

# 应用签名密钥
app.keypair.keyAlias=my-app-key-v1
app.keypair.keyPwd=MyStrongPassword

# Profile 签名密钥
profile.keypair.keyAlias=my-profile-key-v1
profile.keypair.keyPwd=MyStrongPassword

# 根CA
root-ca.keyAlias=my-root-ca-key-v1
root-ca.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany Root CA
root-ca.outFile=myRootCA.cer

# 子CA - 应用
sub-ca.app.keyAlias=my-app-srv-ca-key-v1
sub-ca.app.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany App CA
sub-ca.app.outFile=myAppCA.cer

# 子CA - Profile
sub-ca.profile.keyAlias=my-profile-srv-ca-key-v1
sub-ca.profile.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany Profile CA
sub-ca.profile.outFile=myProfileCA.cer

# 应用证书
cert.app.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany App Release
cert.app.outFile=myApp.pem

# Profile证书
cert.profile.subject=C=CN,O=MyCompany,OU=MyOrg,CN=MyCompany Profile Release
cert.profile.outFile=myProfile.pem

# 待签名的 Provision
sign.profile.inFile=my_profile_template.json
sign.profile.outFile=my_app.p7b

# 待签名的 HAP
sign.app.inFile=my_unsigned.hap
sign.app.outFile=my_signed.hap
CONFIG

# 执行 Step 1: 创建根CA和子CA
python3 autosign.py createRootAndSubCert my_custom.config

Step 2: 准备 Provision 模板并生成签名包

创建 Provision 模板文件 my_profile_template.json

{
    "version-name": "1.0.0",
    "version-code": 1,
    "app-distribution-type": "os_integration",
    "uuid": "用 uuidgen 生成唯一标识",
    "validity": {
        "not-before": 1594865258,
        "not-after": 1735667258
    },
    "type": "release",
    "bundle-info": {
        "developer-id": "MyCompany",
        "distribution-certificate": "-----BEGIN CERTIFICATE-----\n<先用占位符,证书在Step3自动填入>\n-----END CERTIFICATE-----\n",
        "bundle-name": "com.mycompany.myapp",
        "apl": "system_core",
        "app-feature": "hos_system_app"
    },
    "acls": {
        "allowed-acls": [
            "ohos.permission.LISTEN_BUNDLE_CHANGE",
            "ohos.permission.INSTALL_BUNDLE"
        ]
    },
    "permissions": {
        "restricted-permissions": []
    },
    "issuer": "pki_internal"
}

关键字段说明:

字段 说明 定制建议
bundle-name 应用包名 必须与 HAP 的 module.json5 中的 bundleName 一致
app-feature 应用类型 系统应用填 hos_system_app
apl 权限级别 系统核心应用填 system_core
app-distribution-type 分发类型 系统应用填 os_integration
type 构建类型 发行版填 release
uuid 唯一标识 uuidgen 生成
allowed-acls ACL 权限列表 根据需要填写

执行 Step 2:生成证书并签名 Provision

python3 autosign.py createAppCertAndProfile my_custom.config

此步骤会:

  1. 生成应用证书 myApp.pem
  2. 生成 Profile 证书 myProfile.pem
  3. 自动将 distribution-certificate 替换为实际证书
  4. 用 Profile 证书签名 Provision,生成 my_app.p7b

Step 3: 用 p7b 给 HAP 签名

python3 autosign.py signHap my_custom.config

生成签名后的 HAP 包:my_result/my_signed.hap

2.3 直接用 Java 命令签名(无需配置文件)

如果不想用 autosign.py 的流程,可以直接调用 hap-sign-tool.jar:

HAP_SIGN_TOOL=prebuilts/ohos-sdk/linux/26/toolchains/lib/hap-sign-tool.jar
KEYSTORE=my_result/mycompany.p12
PROFILE_PEM=my_result/myProfile.pem
APP_PEM=my_result/myApp.pem

# 第一步: 签名 Profile (生成 .p7b)
java -jar $HAP_SIGN_TOOL sign-profile \
  -keyAlias "my-profile-key-v1" \
  -signAlg "SHA256withECDSA" \
  -mode "localSign" \
  -profileCertFile $PROFILE_PEM \
  -inFile my_profile_template.json \
  -keystoreFile $KEYSTORE \
  -outFile my_app.p7b \
  -keyPwd MyStrongPassword \
  -keystorePwd MyStrongPassword

# 第二步: 用 p7b 签名 HAP
java -jar $HAP_SIGN_TOOL sign-app \
  -keyAlias "my-app-key-v1" \
  -signAlg "SHA256withECDSA" \
  -mode "localSign" \
  -appCertFile $APP_PEM \
  -profileFile my_app.p7b \
  -inFile my_unsigned.hap \
  -keystoreFile $KEYSTORE \
  -outFile my_signed.hap \
  -keyPwd MyStrongPassword \
  -keystorePwd MyStrongPassword

2.4 验证签名

# 验证 HAP 签名
java -jar hap-sign-tool.jar verify-app -inFile my_signed.hap

# 验证 p7b 内容
java -jar hap-sign-tool.jar verify-profile -inFile my_app.p7b

2.5 系统应用 vs 普通应用的关键区别

签名系统应用和普通应用,唯一区别在于 Provision 模板中的两个字段:

{
  "bundle-info": {
    "app-feature": "hos_system_app",   // 系统应用: hos_system_app
                                        // 普通应用: hos_normal_app
    "apl": "system_core"                // 系统核心: system_core
                                        // 系统基础: system_basic
                                        // 普通应用: normal
  }
}

其余签名流程完全相同。

2.6 证书链结构(自定义签名)

MyCompany Root CA (myRootCA.cer)           ← 自签名根证书
    │
    ├── MyCompany App CA (myAppCA.cer)
    │       │
    │       └── MyCompany App Release (myApp.pem)  → 签 HAP 包体
    │
    └── MyCompany Profile CA (myProfileCA.cer)
            │
            └── MyCompany Profile Release (myProfile.pem)  → 签名 .p7b

2.7 常见错误排查

错误信息 可能原因 解决方法
signature verify failed bundle-name 不匹配 确保 p7b 中 bundle-name 与 HAP 的 module.json5bundleName 完全一致
profile expired Provision 过期 修改 validity.not-after 为未来时间
verify signature failed 证书链验证失败 检查根证书是否在设备的可信根证书列表中
app-feature not match 应用类型不匹配 检查 p7b 中 app-feature 是否正确
apl level too low 权限级别不够 apl 改为更高等级如 system_core

2.8 为已有系统应用更换签名

如果需要给一个已经签名的 HAP 更换签名(例如从 OpenHarmony 官方签名切换到自己的签名):

# 使用自己的证书重新签名 HAP
java -jar hap-sign-tool.jar sign-app \
  -keyAlias "my-app-key-v1" \
  -signAlg "SHA256withECDSA" \
  -mode "localSign" \
  -appCertFile my_result/myApp.pem \
  -profileFile my_result/my_app.p7b \
  -inFile original_signed.hap \
  -keystoreFile my_result/mycompany.p12 \
  -outFile new_signed.hap \
  -keyPwd MyStrongPassword \
  -keystorePwd MyStrongPassword

注意: 更换签名后,应用将无法覆盖安装原签名的应用,只能作为全新应用安装。如果设备系统预置了相同包名的系统应用,可能存在冲突。


附录:hap-sign-tool.jar 支持的命令

命令 说明
generate-keypair 生成密钥对
generate-csr 生成证书签名请求 (CSR)
generate-ca 生成 CA 证书
generate-app-cert 生成应用证书
generate-profile-cert 生成 Profile 证书
sign-profile 签名 Provision,生成 .p7b
sign-app 签名 HAP 包
verify-profile 验证 .p7b
verify-app 验证 HAP 包
sign-elf 签名 ELF 可执行文件
posted @ 2026-05-13 16:43  getmoon  阅读(2)  评论(0)    收藏  举报