现在的位置: 首页 > 综合 > 正文

android利用数字证书对程序签名

2017年07月27日 ⁄ 综合 ⁄ 共 2457字 ⁄ 字号 评论关闭

签名的必要性

1、  防止你已安装的应用被恶意的第三方覆盖或替换掉

2、  开发者的身份标识,签名可以防止抵赖等事件的发生。

        开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。另外由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名这时可以可以防止你已安装的应用被恶意的第三方覆盖或替换掉。因而APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本。

签名方式

签名有很多种方式,常见的有:

1、  在Eclipse下通过插件获取数字证书,并签名你的应用。

        打开Eclipse->选择你要签名的项目->右击->android tools->Export signedApplication package,再进行相关操作。这里首先需要创建数字证书,然后再利用数字证书签名你的应用。

      运气好时,你会发现签名失败,却怎么也找不到原因。本人之前就遇到过这种情况,也困惑过好久,最终才发现是插件出问题了,抓狂。那你不妨使用下面一种方法。

2、  用KeyTool产生数字证书文件,再签名你的应用。

命令:

  1. keytool -genkey -v -keystore D:\Users\Administrator\Desktop\mytest.keystore-alias mytest -keyalg RSA -validity 20000  

其中参数含义如下:

  1. -keystore D:\Users\Administrator\Desktop\mytest.keystore表示生成的证书及其存放路径,默认在用户主目录下;  
  2. -alias mytest 表示证书的别名是mytest;  
  3. -keyalg RSA 表示采用的RSA算法;  
  4. -validity 20000表示证书的有效期是20000天。  

这样你就会在相应目录下获得所需的数字证书,如上图所示。

获取到数字证书之后,你就可以用数字证书去签名你的应用,签名步骤如下:

右击工程 --> 选择Android Tools --> Export Signed Application Package --> 选择next  --> 选择Use existing keystore,并填写数字证书位置,以及密码,再next
--> using existing key,选择alias,以及密码,再next --> 选择程序存放位置后完成。

补充:

有时你可能还需要得到证书指纹(MD5和SHA1)。

1、获取证书指纹(MD5)命令:

 

  1. keytool -list -alias mytest -keystore D:\Users\Administrator\Desktop\mytest.keystore  

2、获取证书指纹(SHA1)命令:

  1. 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优化程序。

抱歉!评论已关闭.