返回「计算机、信息技术与工程」

Android 应用签名与密钥管理

更多
Markdown 结构化数据
本文目录 5 个章节

Android 应用签名与密钥管理

note · 通用化说明 本文已移除真实工程路径、别名、口令和内部发布信息。示例中的变量均为占位符。

签名解决什么问题

Android 要求 APK 在安装或更新前经过签名。签名用于确认更新包与已安装应用属于同一签名身份,并参与系统权限、应用更新和商店发布流程。签名不能证明应用没有漏洞,也不能替代代码与依赖安全审查。

基本流程

对 APK 的典型顺序是:

  1. 构建未签名 APK。
  2. 使用 zipalign 对齐;签名后再修改 APK 会使签名失效。
  3. 使用 apksigner 签名。
  4. 使用 apksigner verify 验证。
  5. 在隔离环境安装并执行发布前测试。
$env:ANDROID_KEYSTORE = 'C:\secure\release.jks'
$env:ANDROID_KEY_ALIAS = 'release-key'

zipalign -p -f 4 app-unsigned.apk app-aligned.apk
apksigner sign --ks $env:ANDROID_KEYSTORE --ks-key-alias $env:ANDROID_KEY_ALIAS app-aligned.apk
apksigner verify --verbose --print-certs app-aligned.apk

不要把 --ks-pass pass:...--key-pass pass:... 写入脚本、流水线或命令历史。让工具安全提示输入,或通过 CI 凭据存储以受控方式提供口令。

AAB 与 Play App Signing

面向 Google Play 发布时通常上传 Android App Bundle。启用 Play App Signing 后应区分:

  • 应用签名密钥:用于签署用户最终安装的 APK,由 Play 管理时应按平台流程备份与恢复。
  • 上传密钥:用于验证上传者,可在受控流程中申请重置。

这两类密钥不应混用。其他应用商店或企业分发渠道可能采用不同托管与轮换机制,应分别记录。

CI/CD 安全清单

  • 签名文件不进入 Git,也不放在普通制品存储中。
  • 使用专用发布 Agent,并限制可以触发签名任务的人员和分支。
  • 凭据由 Jenkins Credentials、云密钥管理服务或硬件安全模块提供。
  • 日志关闭命令回显,不上传包含秘密的环境转储。
  • 发布产物保存摘要、证书指纹、构建提交、工具版本和验证结果。
  • 对密钥备份、恢复、轮换和人员离职进行演练。

参考资料