android利用数字证书对程序签名
1、 防止你已安装的应用被恶意的第三方覆盖或替换掉。
2、 开发者的身份标识,签名可以防止抵赖等事件的发生。
开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。另外由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名这时可以可以防止你已安装的应用被恶意的第三方覆盖或替换掉。因而APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本。
签名方式
签名有很多种方式,常见的有:
1、 在Eclipse下通过插件获取数字证书,并签名你的应用。
打开Eclipse->选择你要签名的项目->右击->android tools->Export signedApplication package,再进行相关操作。这里首先需要创建数字证书,然后再利用数字证书签名你的应用。
运气好时,你会发现签名失败,却怎么也找不到原因。本人之前就遇到过这种情况,也困惑过好久,最终才发现是插件出问题了,抓狂。那你不妨使用下面一种方法。
2、 用KeyTool产生数字证书文件,再签名你的应用。
命令:
- keytool -genkey -v -keystore D:\Users\Administrator\Desktop\mytest.keystore-alias mytest -keyalg RSA -validity 20000
其中参数含义如下:
- -keystore D:\Users\Administrator\Desktop\mytest.keystore表示生成的证书及其存放路径,默认在用户主目录下;
- -alias mytest 表示证书的别名是mytest;
- -keyalg RSA 表示采用的RSA算法;
- -validity 20000表示证书的有效期是20000天。
这样你就会在相应目录下获得所需的数字证书,如上图所示。
获取到数字证书之后,你就可以用数字证书去签名你的应用,签名步骤如下:
右击工程 --> 选择Android Tools --> Export Signed Application Package --> 选择next --> 选择Use existing keystore,并填写数字证书位置,以及密码,再next --> using existing key,选择alias,以及密码,再next --> 选择程序存放位置后完成。
补充:
有时你可能还需要得到证书指纹(MD5和SHA1)。
1、获取证书指纹(MD5)命令:
- keytool -list -alias mytest -keystore D:\Users\Administrator\Desktop\mytest.keystore
2、获取证书指纹(SHA1)命令:
- keytool -v -alias mytest -keystore D:\Users\Administrator\Desktop\mytest.keystore
3、这两条命令只是参数不同,你也可以同时获取证书指纹(MD5和SHA1),当然-alias后面的别名一定要跟前面的对应。命令如下图所示:
数字证书简介:
Android数字证书包含以下几个要点:
在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序,数字证书的私钥则保存在程序开发者的手中。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。如果一个permission的protectionLevel为signature,那么就只有那些跟permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。
Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。Android系统要求每一个安装进系 统的应用程序都是经过数字证书签名的, Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系。
(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序。
(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证。
(3)如果要正式发布一个Android,必须使用一个合适的私钥生成的数字证书来给程序签名 ,而不能使用adt插件或者ant工具生成的调试证书来发布。
Android的开发工具(ADT插件和Ant)都可以协助开发者给apk程序签名,它们都有两种模式:调试模式(debug mode)和发布模式(release mode)。在调试模式下,android的开发工具会在每次编译时使用调试用的数字证书(default.keystore)给程序签名,开发者无须关心。当要发布程序时,开发者就需要使用自己的数字证书给apk包签名。因此,当我们在开发微信分享功能时候,需要使用发布模式。如果不使用自己生成的数字证书,你将只能在第一次分享成功,以后就一直调不出分享的界面。
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。
(5)Android使用标准的java工具Keytool和Jarsigner来生成数字证书,并给应用程序包签名。
(6)使用zipalign优化程序。
有关签名密钥(证书)与发行包名变化可能有如下限定:
下面是我自己测试的结果,跟网上的一些资料有些出入,个人认为包主要判断是否属于同一应用,然后签名用来判断程序所属者,判断是否属于不同版本。有任何问题,欢迎轻拍。
1、包名相同,签名相同:安装时可覆盖安装(就是同一程序同一版本)。
2、包名相同,签名不同:Android认为版本发生了变化,需先卸载再安装(同一程序不同版本)。
3、包名不同,签名相同:正常安装。
4、包名不同,签名不同:正常安装。
程序覆盖安装检查:
(1)、两个程序的入口Activity是否相同。两个程序如果包名不一样,即使其它所有代码完全一样,也不会被视为同一个程序的不同版本;
(2)、两个程序所采用的签名是否相同。如果两个程序所采用的签名不同,即使包名相同,也不会被视为同一个程序的不同版本,不能覆盖安装。
总结一下就是:签名、包名相同,需覆盖安装。
这里有一个很简单的例子:当我们在公司开发时,在自己电脑上调试的手机,多次调试时不需要卸载(此时是覆盖安装)。而当其他人拿了这个手机去他电脑上调试时,就需要先卸载该程序(必须卸载安装)。当你以前的程序是采用默认签名的方式(即debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上。
因此使用debug签名的应用:无法在Android市场销售;而且,不同机器生成的debug密钥不同,不利apk升级和维护;debug签名有一年有效期。使用独立签名的应用:可在Android市场销售,签名固定会更加便利apk升级和维护。
参考资料:
http://blog.csdn.net/wirelessqa/article/details/7651613
android利用数字证书对程序签名的更多相关文章
- android 利用数字证书对程序签名
签名的必要性 1. 防止你已安装的应用被恶意的第三方覆盖或替换掉. 2. 开发者的身份标识,签名可以防止抵赖等事件的发生. 开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样 ...
- android利用adb安装应用程序出现“more than one device and emulator wait for device ”
今天,写自动化脚本时,因在这之前进行了一下真机版本的更新,还没有从电脑上拔出,就又在adt打开了一个AVD. 于是,自由自在的就去写脚本了,企图在emulator上装一个APK,在cmd窗口下,利用: ...
- 【转】Android数字证书
Android数字证书的作用是非常重要的.Android操作系统每一个应用程序的安装都需要经过这一数字证书的签名. Android手机操作系统作为一款比较流行的开源系统在手机领域占据着举足轻重的地位. ...
- IONIC 开发的Android应用程序签名(或重新签名)详解
完全通过DOS命令来完成apk签名 给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool.jarsigner和zipalign,下面是对这3个工具的简单介绍: ...
- Android应用程序签名详解 简介
转自: http://blog.csdn.net/lyq8479/article/details/6401093 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名.为什么要给应用 ...
- Android 应用程序签名
本文主要介绍Android应用程序签名的相关理论知识以及怎样公布Android应用程序. 1.签名的概念 为大家所熟知的日常生活中的签名,它是代表某个人的特殊标记,用于唯一标识某个人.而Android ...
- Android应用程序签名详解
http://blog.csdn.net/lyq8479/article/details/6401093 本文主要讲解Android应用程序签名相关的理论知识,包括:什么是签名.为什么要给应用程序签名 ...
- 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等
1.引言 HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其 ...
- https原理及其中所包含的对称加密、非对称加密、数字证书、数字签名
声明:本文章已授权公众号Hollis转载,如需转载请标明转载自https://www.cnblogs.com/wutianqi/p/10654245.html(安静的boy) 一.为什么要使用http ...
随机推荐
- HDOJ 1085 Holding Bin-Laden Captive! (母函数)
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- 云计算中iaas、paas、saas的区别和联系
概念: iass : Infrastructure(基础设施)-as-a-Service, paas : Platform(平台)-as-a-Service, saas : Software(软件)- ...
- 客户端的数据来源:QueryString, Form, Cookie Request[]与Request.Params[]
在ASP.NET编程中,有三个比较常见的来自于客户端的数据来源:QueryString, Form, Cookie . 我们可以在HttpRequest中访问这三大对象. QueryString: 获 ...
- jquery offset() 与position()方法的区别
jquery 中有两个获取元素位置的方法offset()和position(),这两个方法之间有什么异同?使用的时候应该注意哪些问题?什么时候使用offset(),什么时候又使用position()呢 ...
- JS异步加载的三种方式
js加载的缺点:加载工具方法没必要阻塞文档,过得js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作. 有些工具方法需要按需加载,用到再加载,不用不加载,. 默认正常 ...
- ubuntu为Python添加默认搜索路径
我们在自己写python模块的时候,怎么样把自己写的模块加入到python默认就有的搜索路径中呢?不要每次非得import sys; sys.path.append(‘/home/uestc/rese ...
- uploadify IO Error/http error 413
阿里云的服务器 linux 服务器,php 环境,上传附件问题,记录分享一下: 开始测试的时候,都是图片,小附件,没什么问题 系统上线后,发现大的附件上传 有问题,报错 IO Error 开始检查程序 ...
- 计算CRC校验值(CRC16和CRC32)(网络传输检验)
CRC有非常多的模式,我没有全部都做,目前支持 CRC16-Modbus CRC16-X25 CRC32 使用方法 auto data = QByteArray::fromHex( "01 ...
- Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)
Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 ...
- QListWidget特别简单,但有两种添加item的方式
虽然特别简单,但是对于小白来说,还是有必要过一下脑子和眼睛,当然还得过手(江湖传言:眼过千变,不如手过一遍),所以记录在此: #include "tablewidgetxxx.h" ...