移动终端安全:实验2-创建自签名证书对APP签名

实验步骤

1.直接安装我们实验要用的.apk

2、获取未签名的app

(1)删除META-INF文件

取消自动签名,直接删除改文

(2)查看此时app是否为未签名app

3、创建自签名证书

(1)打开keytool,生成私钥

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

参数说明:

  • keystore:密钥库文件名
  • alias:密钥别名
  • validity:有效期(单位:天)

按提示填写信息(如姓名、组织、城市等),设置密码(记住它,后面要用)。

4、对app签名

(1)使用 jarsigner 对 APK 签名:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore unsigned.apk my-key-alias

输入密钥库密码和密钥密码(如果设置了不同密码)。

5、安装app

(1)检查app的签名

jarsigner -verify -verbose -certs unsigned.apk

利用上述方法我们重新进行高强度签名。

这里我们直接使用MT管理器进行重签

查看重新签名后文件

(2)测试app是否能够正常安装

可以安装成功

总结

一、传统方案(JDK 自带)知识点速览

  1. 角色与文件
    • keystore(.jks/.p12)= 包含 私钥 + 证书链
    • alias = 私钥在库里的"名字"
    • APK 本质 = ZIP,签名信息放在 META-INF(*.SF / *.RSA / *.MF)
  2. 两条命令
    • 生成私钥keytool -genkeypair -keystore xxx.jks -alias xxx -keyalg RSA -keysize 2048 -validity 3650
    • 签名jarsigner -sigalg SHA256withRSA -digestalg SHA-256 -keystore xxx.jks apk.apk alias
  3. 验证 jarsigner -verify -verbose -certs apk.apk出现 jar verified 即可。
  4. 缺点

❌ 仅支持 V1 签名方案(JAR 签名)

❌ 对 ZIP 内容顺序/压缩方式敏感,无法对齐后签名

❌ 不支持 旋转密钥、密钥轮换

❌ 弱算法(SHA1/MD5)已被 Java 标记为 "视为未签名"


二、先进方式:Google 官方 APK Signature Scheme

  1. 工具升级

    • apksigner (Android SDK/build-tools 24.0.3+)同时支持 V1(JAR)+ V2(APK 全文)+ V3(密钥轮换)+ V4(增量/ADB)
    • zipalign 必须在 apksigner 之前 运行,保证内存对齐。
  2. 完整流程(推荐脚本)

    `# 1. 对齐 zipalign -v -p 4 unsigned.apk aligned.apk

    # 2. 签名(V1+V2+V3 全开) apksigner sign --ks release.jks --ks-key-alias release --out signed.apk aligned.apk

    # 3. 验证 apksigner verify -v --print-certs signed.apk`

    输出 Verified using v1 scheme (true), v2 scheme (true), v3 scheme (true) 即通过。

  3. 密钥与轮换

    • V3 方案支持 密钥轮换 :旧密钥 + 新密钥 交叉签名 ,可实现 无损更换签名证书(用户可无缝更新)。

    • 旋转命令

      apksigner rotate --out new.keystore --old-signer \\ --ks old.jks --new-signer --ks new.jks

  4. 算法与兼容性

    • 默认使用 SHA-256 / RSA-2048(也可 ECC:SHA-256 / ECDSA-P-256)
    • Android 7.0+ 支持 V2;Android 9.0+ 支持 V3;Android 11+ 支持 V4。
    • 同时开启多版本 向下兼容 :低版本只识别 V1,高版本优先校验 V2/V3,速度+安全性双提升
  5. CI/CD 集成

    • Google Play App Signing 强制要求上传 V2+ 签名;
    • 在 GitHub Actions / GitLab CI 里加两步即可:zipalign + apksigner sign --ks-key-alias ${``{ secrets.ALIAS }} --ks-key-pass pass:${``{ secrets.KP }} --ks-pass pass:${``{ secrets.KSP }} ...

  1. 本地调试/老旧教程 :jarsigner 够用,但记得 SHA-256 以上算法。
  2. 上架 Play / 新应用zipalign → apksigner 一步到位,同时开启 V1+V2+V3
  3. 长期维护 :启用 Google Play App Signing + V3 密钥轮换,以后证书过期也能无缝迁移。
相关推荐
alex1001 小时前
API安全漏洞详解:Broken Function Level Authorization (BFLA) 的威胁与防御
网络·安全
leagsoft_10034 小时前
上新!联软科技发布新一代LeagView平台,用微服务重塑终端安全
科技·安全·微服务
用户47949283569156 小时前
什么是XSS攻击,怎么预防,一篇文章带你搞清楚
前端·javascript·安全
白帽子黑客罗哥6 小时前
云原生安全深度实战:从容器安全到零信任架构
安全·云原生·架构·零信任·容器安全·kubernetes安全·服务网络
TG_yunshuguoji6 小时前
亚马逊云代理商:怎么快速构建高安全区块链应用?
网络·安全·云计算·区块链·aws
喜欢你,还有大家7 小时前
企业安全防护之——防火墙
服务器·网络·安全
滑水滑成滑头7 小时前
**发散创新:探索零信任网络下的安全编程实践**随着信息技术的飞速发展,网络安全问题日益凸显。传统的网络安全防护方式已难以
java·网络·python·安全·web安全
光影少年8 小时前
网络安全生态及学习路线
学习·安全·web安全
是Yu欸9 小时前
【仓颉语言】原生智能、全场景与强安全的设计哲学
开发语言·安全·鸿蒙·鸿蒙系统·仓颉语言
酷柚易汛智推官9 小时前
基于MemU的自主代理记忆管理系统:技术解析与实践
java·安全·架构