乐于分享
好东西不私藏

移动 App 指纹(签名)是如何工作的?

移动 App 指纹(签名)是如何工作的?

一、签名证书生成

开发者在本地生成 Keystore / JKS 文件(自签名证书):
  • 私钥(Private Key):开发者自行保管,不外泄。

  • 公钥(Public Key):打包进 APK 文件中。

  • 证书(Certificate):包含公钥及开发者信息(名称、组织等)。

注意:Android 支持使用自签名证书,无需 CA 机构签发。


二、APK 签名过程

  • 对 APK 内除签名文件外的所有文件进行哈希计算(常用 SHA-256)。

  • 使用私钥对哈希值进行 RSA 加密,生成数字签名。

  • 将签名数据与公钥证书一同放入 APK 的META-INF目录。


三、安装时的校验流程(安卓系统 / 平台)

  • 若设备已存在同包名应用:

  • 对比新旧应用证书是否完全一致。
  • 不一致则禁止覆盖安装,防止签名被恶意替换。
  • 签名校验:

  • 使用公钥解密签名,得到原始哈希值。
  • 重新计算当前 APK 文件的哈希值。
  • 两者一致则签名验证通过,允许安装。

四、签名指纹不能保证的事

  • 无法证明 App 的真实开发者身份(自签名可随意生成)。

  • 无法证明包名合法或未被盗用。

  • 无法证明证书可信(系统不做证书信任链验证)。

签名仅保证:APK 自签名后未被篡改,且可安全覆盖安装同包名旧版本。
所以安卓程序的安装都应该从应用市场下载,因为市场会对同一个应用的稳定的签名进行验证,确保后续的版本不是伪造。

五、iOS 与 Android 签名机制对比

维度
Android
iOS
证书来源
支持自签名或第三方 CA,系统不强制验证信任链
必须由 Apple 签发,自签名无法通过系统验证
包名绑定
证书不绑定包名,仅同包名 + 同签名可覆盖安装
证书与 App ID(Bundle ID)强绑定
防冒充逻辑
系统仅防篡改,不认证开发者身份,依赖应用市场校验
系统强制验证证书链,仿冒成本极高
覆盖安装
同包名 + 同签名方可覆盖安装
同 Bundle ID + 同一证书方可覆盖安装

六、总结

  • Android 签名更接近防篡改水印。

  • iOS 签名类似身份证 + 公证处双重验证,安全性更高,但受 Apple 管控更多。


作者简介:从事 Web 前后端开发多年。一直相信“技术应该被说人话”,坚持输出实用易懂的干货内容。闲暇写些随笔,记录行业观察与生活感悟。