用途:标识应用程序作者和应用程序之间建立信任关系。数字证书不是权威机构认证,它是用来让应用程序包自我验证,也用来判断该应用是否被别人破解,二次打包的一个标准。签名并不能防止被破解
优点
1. 程序升级
相同签名的才能被认为是同一个程序,才允许被覆盖安装
2.模块化设计和开发
3.共享数据和代码
如果应用在manifest.xml中声名permission为 android:protectionLevel = 'signature',则这个权限就只能授予那些跟权限所在地包拥有同一个数字签名的程序。
如何签名?
ROM签名 和APK签名
前者是针对已经生成的Android系统ROM包进行签名,后者是针对Android系统的一个APK签名。
APK是jar包,工具用signapk.jar,命令
java -jar signapk.jar publickey privatekey input.apk output.apk
signapk 源码位置 build/tools/signapk/SignApk.java中
签名后的APK多了META-INF文件夹
MANIFEST.MF
包括apk包信息,如manifest文件版本,签名版本,应用程序相关属性,签名相关属性等。
CERT.SF
铭文的签名证书,采用签名得到
CERT.RSA:保存用药,所采用的加密算法等信息。
密文的签名证书,通过公钥生成。
怎么验证签名
通过CERT.RSA查找公钥和算法,并对CERT.SF进行解密和签名认证,确认MANIFEST.MF,最终对每个文件签名校验。