在 HarmonyOS 应用/元服务的签名体系中,p12、csr、cer、p7b 四类文件分别承担不同角色:p12 是密钥库文件,csr 是证书请求文件,cer 是数字证书,p7b 是 Profile 文件。其中 p7b(Profile 文件)与包名强绑定,而 p12、csr、cer 与包名无关,可以在多个应用间复用34。

四类文件的定义

  • p12(密钥库文件):存储非对称加密使用的公钥和私钥,公钥和私钥用于数字签名和验证1。
  • csr(证书请求文件):基于 p12 中的密钥生成,用于向华为申请数字证书的"申请材料"2。
  • cer(数字证书):华为颁发的证书文件,与 p12 中的公钥对应,用于证明开发者身份,保证应用/元服务的完整性1。
  • p7b(Profile 文件):即 HarmonyAppProvision 文件,包含应用/元服务的 包名、数字证书信息、允许申请的权限列表,以及允许调试的设备列表(Release 类型时设备列表为空),每个应用/元服务包中必须包含一个 Profile 文件1。

四者的生成与依赖关系

整个签名链路为:先生成密钥,再基于密钥申请证书,最后基于证书和包名申请 Profile:

与包名的绑定关系

强绑定:p7b(Profile 文件)

Profile 文件中直接写入了包名(bundle name)、关联的证书信息、权限列表等内容12,因此每个应用/元服务都必须申请自己专属的 Profile 文件,不同包名的应用不能共用同一个 p7b。

不绑定:p12、csr、cer

这三者只与开发者账号(签名主体)相关,与具体包名无关。官方 FAQ 给出了明确结论:如果需要发布多个应用,可以使用 同一个 p12 和 cer,仅为每个应用申请新的 Profile 文件,其他文件均可复用34。例如已有应用 com.huawei.demo.myapp 使用 myapp.p12 + myapp.cer + myappRelease.p7b,发布新应用 com.huawei.demo.hmservice 时,只需申请新的 myserviceRelease.p7b(关联证书仍选 myapp.cer),p12 和 cer 原样复用3。

签名时的配套使用要求

在 DevEco Studio 中手动配置签名时,密钥库文件、密钥库密码、密钥别名、密钥密码、Profile 文件、数字证书文件必须配套使用,否则会导致签名失败2。签名配置会写入工程级 build-profile.json5 的 signingConfigs 中,典型结构如下:

{
  "app": {
    "signingConfigs": [
      {
        "name": "default",
        "material": {
          "certpath": "./signature/myapp.cer",       // 数字证书
          "storePassword": "******",                 // 密钥库密码
          "keyAlias": "myapp",                       // 密钥别名
          "keyPassword": "******",                   // 密钥密码
          "profile": "./signature/myappRelease.p7b", // Profile 文件,与包名绑定
          "signAlg": "SHA256withECDSA",
          "storeFile": "./signature/myapp.p12"       // 密钥库文件
        }
      }
    ]
  }
}

补充说明

  • 调试与发布要区分:调试 Profile(包含调试设备列表)与发布 Profile 是不同的 p7b 文件,使用发布证书和发布 Profile 签名的包只能用于上架,不能用于运行调试工程。
  • csr 是一次性中间文件:csr 仅在申请 cer 时使用,签名阶段不再需要它;签名实际依赖的是 p12(提供私钥)、cer(提供证书)和 p7b(提供包名与授权信息)三件套。
  • 换包名只需换 p7b:日常开发中若只是新增应用或修改包名,无需重新生成密钥和证书,重新申请对应包名的 Profile 文件即可。
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐