Android应用程序签名概述

原创 2015年07月07日 11:34:08

1. 为什么要签名

如果只能用一句简单的话语来回答这个问题的话,我会说:“这是Android系统所要求的”。

应用程序签名是一个这样的过程,即使用私有密钥数字地签署一个给定的应用程序,以便达到如下3个目的:

◆识别代码的作者

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

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

基于这一信任关系,应用程序可以安全地共享代码和数据。如果一个 permission的保护级别为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。 Android使用Java的数字证书相关的机制 来给APK加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装到 系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。也就是说如果一个Android应用程序没有经过数字签名,是没有办法 安装到系统中的!Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字签 名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。

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

开发者可以生成不同的证书,我们建议同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处:

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

◆ 有利于程序的模块化设计和开发。Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序。所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块。

◆ 可以通过权限(permission)的方式在多个程序间共享数据和代码。Android提供了基于数字证书的权限赋予机制,应用程序可以和其他的程序共 享该功能或者数据给那那些与自己拥有相同数字证书的程序。如果某个权限(permission)的保护级别是signature,则这个权限就只能授予那 些跟该权限所在的包拥有同一个数字证书的程序。

2. 签名的相关问题

在签名时,需要考虑数字证书的有效期:

◆数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有该数字证书的程序将不能正常升级。

◆如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。

◆Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。

另外,Android数字证书包含以下几个要点:

◆所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序。

◆Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证。

◆如果要正式发布一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件 或者ant工具 生成的调试证书来发布。

◆ 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

◆Android使用标准的java工具 Keytool and Jarsigner 来生成数字证书,并给应用程序包签名

3. 两种模式

构建 Android 应用程序时可以采用调试模式和发布模式:

(1)使用 Android 构建工具(命令行和 Eclipse ADT)构建的应用程序是用一个调试私有密钥自动签名的;这些应用程序被称为调试模式应用程序。调试模式应用程序用于测试,不能够发布。注意,未签名的或 者使用调试私有密钥签名的应用程序不能够通过 Android Market 发布。在调试模式下,Android的开发工具会在每次编译时使用调试用的数字证书给程序签名,开发者无须关心。

(2)准备发布自己的应用程序时,必须构建一个发布模式的版本,这意味着用私有密钥签署应用程序。当要发布程序时,开发者就需要使用自己的数字证书给APK包签名,可以有两种方法。

◆在命令行下使用JDK中的和Keytool(用于生成数字证书)和Jarsigner(用于使用数字证书签名)来给APK包签名。

◆使用ADT Export Wizard进行签名(如果没有数字证书可能需要生成数字证书)。

本文出自 “卓越始于足下” 博客,请务必保留此出处http://patterson.blog.51cto.com/1060257/708491

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android安全机制分析,及应用程序签名机制

原文链接:http://www.2cto.com/Article/201308/237263.html Android安全机制分析 Android系统是基于Linux内核开发的,因此,Androi...
  • zhao3546
  • zhao3546
  • 2013年09月04日 15:06
  • 7552

Android 签名有什么用?

所有的android应用程序都要求开发人员用一个证书进行数字签名,Android系统不会安装没有进行数字签名的应用程序。 平时我们开发的程序可以安装在模拟器上并运行,是因为在应用程序开发期间,由于...
  • LB_fighting
  • LB_fighting
  • 2016年09月28日 09:23
  • 249

Android应用程序签名 debug签名

Android系统要求所有的程序经过数字签名才能安装,如果没有可用的数字签名,系统将不许安装运行此程序,不管是模拟器还是真实手机。因此,在设备或者是模拟器上运行调试程序之前,必须为应用程序设置数字签名...
  • Vivian8725118
  • Vivian8725118
  • 2014年01月28日 17:39
  • 578

android应用程序签名

概述 Android系统要求,所有的程序经过数字签名后才能安装。Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系。证书不是用于用户控制哪些程序可以安装。证书不需要授权中心...
  • aoshiwenrou
  • aoshiwenrou
  • 2014年10月11日 10:43
  • 391

签名android应用程序

一个很基础的常识——android项目以包名作为唯一标识,在同一台手机上安装两个包名相同的应用,后面的应用会自动覆盖前面安装的应用。这看似是一个很合理的做法,但是包名就像是一个人的名字一样,世界这么大...
  • old_sparrow
  • old_sparrow
  • 2016年04月29日 14:38
  • 132

Android应用程序签名

概述 Android系统要求,所有的程序经过数字签名后才能安装。Android系统使用这个证书来识别应用程序的作者,并且建立程序间的信任关系。证书不是用于用户控制哪些程序可以安装。证书不需要授权中心来...
  • peakerli
  • peakerli
  • 2013年09月26日 15:55
  • 501

安卓应用程序的基础介绍

-- Activity(界面), service(服务), content provider(内容提供者), broadcast receiver(广播接收者)并称安卓四大组件. 一个安卓应用程序由一...
  • waym2352
  • waym2352
  • 2014年12月12日 15:15
  • 1240

Android应用程序签名步骤

Android应用程序签名步骤 1)准备工作       apk的签名工作可以通过两种方式来完成:             1)通过ADT提供的图形化界面完成apk签名;           ...
  • lll1590
  • lll1590
  • 2014年03月10日 15:42
  • 651

[014] Android应用程序签名详解 .

本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名、为什么要给应用程序签名、如何给应用程序签名等。 1、什么是签名?       如果这个问题不是放在Android开发中来问,...
  • u011683001
  • u011683001
  • 2013年09月22日 15:40
  • 412

Android应用程序签名详解

1、什么是签名?      如果这个问题不是放在Android开发中来问,如果是放在一个普通的版块,我想大家都知道签名的含义。可往往就是将一些生活中常用的术语放在计算机这种 专业领域,大家就开始迷惑了...
  • Smart_yujin
  • Smart_yujin
  • 2013年08月29日 14:33
  • 477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android应用程序签名概述
举报原因:
原因补充:

(最多只允许输入30个字)