DCloud_App_Array
DCloud_App_Array
  • 发布:2019-06-03 17:31
  • 更新:2022-07-29 17:00
  • 阅读:136144

Android平台云端打包证书使用说明

分类:HBuilderX

HBuilderX中开发完成发布为原生App提交云端打包时,在“App云端打包”界面中Android平台需要选择签名证书:

支持以下证书类型:

  • 使用自有证书
    开发者自己生成证书,正式发布应用时推荐使用此类型证书
  • 使用公共测试证书
    使用DCloud云端默认的测试证书,仅限开发测试时使用。由于此证书对所有开发者公开,正式发布应用使用此证书存在安全隐患
  • 使用DCloud老板证书
    兼容老项目使用之前的DCloud证书时选择,此证书将废弃,尽量不要使用此证书

关于Android证书的用途

证书是一个开发者的身份标志,对Android系统而言。使用一个证书签发的App,是属于同一个开发者的App。

举个极端的例子,如果你的应用证书泄露,那么别人可以用这个证书签名一个仿冒App,假如包名和你的包名也一样,就可以覆盖安装安卓手机上你之前的包。

当前仅依赖证书校验是不完善的,所以主流的Android应用市场,通过实名认证开发者信息和著作权,强化了App的唯一性。也就是从主流应用市场点更新,不会发生冒充事件。但是通过其他方式安装apk,仍然会发生冒充的可能性。

如果签名不同,即使包名相同,也无法覆盖安装。此时安卓手机会在安装时报错,需要先卸载老的版本,才能安装新版。

证书安全说明

Android的应用安全管理模型,包括包名、证书、应用市场的账户。

包名是公开的,任何人都可以做一个apk包,包名和你的应用包名相同。那么如何防止仿冒包?

  1. 他人没有你的应用市场账户,就无法在市场发布仿冒包。
  2. 他人没有你的签名证书。不过这一点,现实中有很多问题,手机用户是没有识别能力的。大多数安卓手机上也无法查看应用的签名信息。

证书使用说明

使用自有证书打包发布

开发者如果已经有自己的安卓证书,可直接使用。
如果没有,使用JDK的keytool工具生成一个,不像Apple证书那样收费,制作Android证书没有费用。
完整教程参考Android平台签名证书(.keystore)生成指南
注意以下问题:

  • 证书文件密码(storepass)和证书密码(keypass)必须一致,HBuilder|HBuilderX要求这两个密码一致
  • 证书别名使用英文字母或数字(老版本HBuilder不支持使用中文别名)
  • 证书名称建议使用英文字母或数字,避免使用中文

生成证书后注意保存,不要泄露。

提交云端打包时,如下图配置:

提交云端打包后,打包机会立即删除的证书,不会保存或泄露证书,请放心使用

使用云端证书(服务器生成的证书)

生成自有证书需要配置jre环境,为了方便开发者快速生成证书云端打包,从HBuilderX3.2.0及以上版本开始支持服务器生成证书。
在App打包界面可以直接勾选“使用云端证书”:

注意:

  • 服务器生成的证书绑定应用appid,即每个appid会各自生成证书
  • 服务器生成的证书会自动填写证书信息,不支持自定义证书信息,有效期为100年
  • 查看或下载服务器生成的证书,请登录DCloud开发者中心

使用公共测试证书打包

为了方便开发者评估、测试体验,可直接使用公共测试证书打包,免去制作证书的麻烦。
证书信息参考:https://ask.dcloud.net.cn/article/36522
注意:

  • 所有开发者都能使用此证书打包
  • 证书可以被所有人下载
  • 证书信息为Test

使用DCloud公用证书

为了方便开发者评估、测试,或用于一些安全要求不高的场合,老版本HBuilder/HBuilderX提供了公用DCloud证书,免去了开发者制作自有证书的麻烦。
因为此证书包含DCloud公司名称信息,与实际应用的所有者信息描述和省份不符,为了保障开发者利益及安全要求,将废弃此证书。
详情参考https://ask.dcloud.net.cn/article/68

使用DCloud公用证书不影响提交应用市场通过审核。

注意事项

注意证书有一个特点,用A证书打包后,后续新版若改用B证书,会导致升级包无法安装。因为相同包名但签名不同时,Android rom不允许安装新包。所以商用第一版应用发布时,证书一定选择好。
在极端情况下,使用公用证书可能发生应用被仿冒:

  1. 如果你的应用使用了DCloud公共证书,且
  2. 应用升级下载新版apk,使用了http链接,被劫持,替换为新包;或手机usb链接到非安全电脑,并允许了该电脑给手机安装应用,且
  3. 仿冒的新包包名和你的包相同,证书也相同,版本号大于老包,就会升级成功,将手机上你的应用替换为仿冒应用。那么用户在仿冒应用里填写的用户名密码就会被仿冒者获取。

证书的区别如上,如何选择证书,每位开发者根据自己的需求定夺。

3 关注 分享
5***@qq.com 1***@qq.com rysnone

要回复文章请先登录注册

烽火chy

烽火chy

请问打包后有没有通过接口与服务器端存储的证书签名对比校验的方法
2022-07-29 17:00
1***@qq.com

1***@qq.com

发布正式版本用 DCloud开发者中心 生成的证 书 可以吗
2022-07-27 16:26
1***@qq.com

1***@qq.com

发布正式版本用 DCloud开发者中心 生成的证书可以吗
2022-07-27 16:25
1***@qq.com

1***@qq.com

我想问一下,为什么我用了自有证书,app一直就是在启动界面
2022-07-08 09:56
DCloud_App_Array

DCloud_App_Array (作者)

回复 y***@gmail.com :
确定两个应用的appid是否一致?请单独发帖,上传两个安装包。
2022-07-05 12:14
y***@gmail.com

y***@gmail.com

回复 y***@gmail.com :
我自己使用本地自己生成的证书 。 换了台电脑。同样的 账号同样的名字 同样的证书 。。。。就成了两个包了
原来的包覆盖不掉了。付费请教问题
2022-07-05 01:49
y***@gmail.com

y***@gmail.com

使用云端证书进行云打包,换了电脑后重新使用云端证书进行云打包,旧电脑打包的app不能被覆盖掉,存在两个app,但是包名与证书都一致,这是什么问题?
2022-07-05 01:46
rysnone

rysnone

学习
2022-05-28 16:16
1***@qq.com

1***@qq.com

回复 DCloud_App_Array :
云端证书使用的JDK版本是多少啊,本地需要生成签名宝,认领应用,我本地安装的是java version "1.8.0_40"

生成签名包报错,jarsigner 错误: java.lang.RuntimeException: 密钥库加载: Invalid keystore format
2022-05-23 18:26
1***@qq.com

1***@qq.com

云端证书使用的JDK版本是多少啊,本地需要生成签名宝,认领应用,我本地安装的是java version "1.8.0_40"
生成签名包报错,jarsigner 错误: java.lang.RuntimeException: 密钥库加载: Invalid keystore format @DCloud_App_Array
2022-05-23 18:09