background image

Android 应用程序签名解析

1. 为什么要签名

如果只能用一句简单的话语来回答这个问题的话,我会说:

“这是 Android 系统所要求

”。

应用程序签名是一个这样的过程,即使用私有密钥数字地签署一个给定的应用程序,

以便达到如下

3 个目的:

◆识别代码的作者

◆检测应用程序是否发生了改变

◆在应用程序之间建立信任

基于这一信任关系,应用程序可以安全地共享代码和数据。如果一个

 permission 的保护

级别为

signature,那么就只有那些跟该 permission 所在的程序拥有同一个数字证书的应用

程序才能取得该权限。

Android 使用 Java 的数字证书相关的机制 来给 APK 加盖数字证书,

要理解

android 的数字证书,需要先了解以下数字证书的概念和 java 的数字证书机制 。

Android 系统要求每一个安装到系统的应用程序都是经过数字证书签名的,数字证书的私钥
则保存在程序开发者的手中。也就是说如果一个

Android 应用程序没有经过数字签名,是没

有办法安装到系统中的

!Android 通过数字签名来标识应用程序的作者和在应用程序之间建

立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字签名由应用程序的作
者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。

尤其值得注意的是:与信息安全领域其他使用数字证书的用途不同,

Android 将数字证

书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以
安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应
用程序包自我认证的。也就是说,这个证书完全是由开发者来进行控制和使用的。

开发者可以生成不同的证书,我们建议同一个开发者的多个程序尽可能使用同一个数

字证书,这可以带来以下好处:

 

◆ 有利于程序升级,当新版程序和旧版程序的数字证书相同时,Android 系统才会认为

这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同,则
Android 系统认为他们是不同的程序,并产生冲突,会要求新程序更改包名。

 

◆ 有利于程序的模块化设计和开发。Android 系统允许拥有同一个数字签名的程序运行

在一个进程中,

Android 程序会将他们视为同一个程序。所以开发者可以将自己的程序分模

块开发,而用户只需要在需要的时候下载适当的模块。