关于android 签名系统的理解
来源:互联网 发布:淘宝阿里旺旺号那里看 编辑:程序博客网 时间:2024/05/22 14:57
这几天通过查资料、看源码和做试验,对android签名系统有了大概的理解,现总结一下,供参考:
关于签名的作用APK签名的作用:
1 发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换。
2 保证信息传输的完整性,签名对于包中的每个文件进行处理,以此确保包中内容不被替换,防止交易中的抵赖发生,Market对软件的要求。
Recovery签名作用:
Recovery进行签名的主要作用是用来验证数据的完整性。
如何签名Android使用SHA1-RSA算法进行签名。可通过eclipse插件进行,可以通过keytool和jarsigner 用命令行执行。也可以在源码下进行签名。以源码下签名方法来介绍:
生成密钥对方法:
Android源码目录development\tools 下有make_key脚本:
生成公钥:openssl genrsa -3 -outtestkey.pem 2048
转换成X509证书格式: openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000-subj ‘xx’
生成私钥:openssl pkcs8 -in testkey.pem-topk8 -outform DER -out testkey.pk8 –nocrypt
具体参数可以在网上查看。目前我们使用默认的testkey密钥对。
对APK签名命令:
signapk publickey.x509[.pem]privatekey.pk8 input.apk output.apk
对recovery签名命令:
signapk –w publickey.x509[.pem]privatekey.pk8 input.zip output.zip
- w参数表示对整个文件进行签名,目前看只是在制作recovery升级包时使用。
签名后,输出文件的meta_inf目录下生长如下文件:
MANIFEST.MF:对非文件夹非签名文件的文件,逐个生成SHA1的数字签名信息
CERT.SF:对Manifest文件,使用SHA1-RSA算法,用私钥进行签名。
CERT.RSA:CERT.RSA文件中保存了公钥、所采用的加密算法等信息。
怎样验证签名
APK验证:
安装apk时,通过CERT.RSA查找公钥和算法,并对CERT.SF进行解密和签名验证,确认MANIFEST.MF,最终对每个文件签名校验。
升级时,android也会进行签名验证。如果遇到以下情况,都不能完成升级:
1) 两个应用,名字相同,签名不同
2) 升级时前一版本签名,后一版本没签名。
3) 升级时前一版本为DEBUG签名,后一个为自定义签名。
4) 升级时前一版本为Android源码中的签名,后一个为DEBUG签名或自定义签名。
5) 安装未签名的程序。
6) 安装升级已过有效期的程序。
以上可以看到,随便更换密钥对后签名生成的apk也是可以安装在任何平台的。因为公钥是放在apk里的。
RECOVERY:
Recovery公钥是固定在代码里面。并没有采用CERT.RSA里面公钥。目前几乎所有的手机平台都是用testkey。固定公钥目的可能是为了确保其它平台的升级包不能被升级。比如我们统一更换了一个密钥对,那么recovery里面固定的公钥更改后,用testkey做成的升级包是无法升级成功的。
同时recovery只是对整个升级压缩文件进行签名校验(前面说过recovery签名使用的是-w)。
Recovery 代码里面使用的公钥是按照rsapublickey 数据结构存储。这个数据是通过dumppublickey工具从制作出来的x509证书文件中获得。Dumppublickey代码在网上可以查找到。
- 关于android 签名系统的理解
- 关于android apk系统签名
- 关于系统签名的问题
- android系统签名的不足
- Android APP的系统签名
- 关于ios签名机制的理解
- 关于ios签名机制的理解
- 关于android的程序签名
- 关于android的程序签名
- 关于android的程序签名
- 关于Android 签名的问题
- 关于android签名的问题
- Android中关于gradled的理解以及如何签名和打包
- Android应用程序签名系统的签名(SignApk.jar)
- Android 签名个人理解
- 关于Android设备root权限和系统签名权限的区别问题
- Android源码浅析(五)——关于定制系统,如何给你的Android应用系统签名
- 生成release版本的Android系统 --签名
- C++四则计算器源码
- linux进程和线程
- PHP 与文件系统处理
- 如何判断子进程已启动
- 高性能前端~高性能HTML
- 关于android 签名系统的理解
- linux文件truncate命令
- MYSQL-常用SQL
- Estimated and Actual Execution Plans
- 忘交电费
- Java的新I/O(java.nio包)
- Floodlight 安装 配置 curl命令 添加流 删除流
- 用Merge代替复杂的Update
- UVA 11174 - Stand in a Line (数学基础+除法取模)