Android App签名和权限

签名简介

在Android系统中,所有安装到系统的应用程序都必有一个Android数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。

Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解Android数字证书,需要先了解以下数字证书的概念和java的数字证书机制。

基础概念:数字证书

数字证实是采用数字手段来证实用户身份的一种方法。数字证书含有两部分数据:一部分是对应主体(单位或个人)的信息,另一部分是这个主体所对应的公钥。即数字证书保存了主体和它的公钥的一一对应关系,用于自我认证(向其他的用户证明自己的身份)。

Java数字证书工具

Java中的keytool.exe可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。
每一个证书库是一个文件组成,它有访问密码,在首次创建时,它会自动生成证书库,并要求指定访问证书库的密码。
在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,它们的意思是:
CN
OU
O(Organization组织名称)
L(Locality城市或区域名称)
ST
C(Country国家名称)
可以采用交互式让工具提示输入以上信息,也可以采用参数
-dname "CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx"来自动创建。
例如这条命令:
keytool -genkey -alias testCA -keyalg RSA -keysize 1024 -keystore testCALib -validity 3650
在数字证书库testCALib中创建了一个别名为testCA,使用RSA算法加密的,有效期为3650天的数字证书。
证书生成以后,我们可以使用命名将数字证书导出为一个文件。
keytool -export -alias testCA -file testCA.cer -keystore testALib -rfc
有关keytool的其他用法可以查询keytool的帮助文档。
数字证书生成以后,我们需要使用生成的数字证书给程序包签名,这个是使用jarsigner 工具。例如,如果我们有一个android的程序包calendar.apk.,我们就可以使用刚生成的testCA给改程序包签名。
jarsigner -keystore testCALib calendar.apk testCA.

签名的意义

保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。

Android数字证书概述

Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
Android数字证书包含以下几个要点:

 1. 所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
 2. Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
 3. 如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
 4. 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值