Android数字签名

一、为什么要签名

       开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。

        由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。

       APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。

       这样签名其实也是开发者的身份标识。交易中抵赖等事情发生时,签名可以防止抵赖的发生。

二、签名的注意事项

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

       Android签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。

       系统仅仅会在安装的时候测试签名证书的有效期,如果应用程序的签名是在安装之后才到期,那么应用程序仍然可以正常启用。

       可以使用标准工具-Keytool and Jarsigner-生成密钥,来签名应用程序的.apk文件。

       签名后需使用zipalign优化程序。

       模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。

       正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。

 

三、签名方法:

1.使用Keytool jarsigner工具签名(在jdk/bin目录下)

1.生成签名keystore数字签名

确保电脑上安装了JDK,因为我们将使用JDK自带的创建和管理数字证书的工具Keytool。在命令行下输入如下命令:

keytool -genkey -v -keystore app.keystore -alias alias_name -keyalg RSA -validity       20000

-alias 后面跟的是别名这里是alias_name
-keyalg 
是加密方式这里是RSA
-validity 
是有效期这里是20000
-keystore 
就是要生成的keystore的名称这里是app.keystore           
然后按回车键
按回车后首先会提示你输入的密码:这个在签名时要用的,要记住
然后会再确认你的密码。
之后会依次叫你输入姓名、组织单位、组织名称、城市区域、省份名称、国家代码(CN)等。

Keytool的详细参数请参考:

http://www.android123.com.cn/androidkaifa/173.html

2.签名:

jarsigner -verbose -keystore app.keystore -signedjar app_signed.apk app.apk alias_name
-keystore: keystore的名称
-signedjar  app_signed.apk: 指定签名后生成的APK名称
app.apk: 目标APK
然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。

 

3.查看签名:

jarsigner -verify app_signed.apk                                  

查看是否签名,如果已经签名会打印 "jar verified".

jarsigner -verify -verbose -certs app_signed.apk      

查看签名详细信息。

 

4.通过zipalign工具进行优化apk(android自带的工具,./build/tools/zipalign)

zipalign -v 4  app_signed.apk androidres.apk   apk优化

zipalign -c -v 4  androidres.apk                 查看apk是否经过优化

 

 2.使用eclipse ADT工具签名
Package Explorer 窗口,右键,选择Android Tools--->Export Signed Application Package 然后按照提示一步一步,生成已签名的apk。通过eclipse也可以导出未签名的APK文件。

注:需要输入两次密码,第一次是私钥密码,第二次时私钥别名的密码。

 

  3.eclipsedebug模式下自动签名(无须手动配置): 

       debug模式下用eclipse ADTandroid签名,只要应用程序在eclipse下开发,系统就会自动给apk签名和优化。

       EclipseWindows > Preferences > Android  > Build可以看到你keysotre的位置;


jarsigner签名时用的是keystore数字证书文件,signapk签名时用的是pk8和x509.pem文件
数字证书文件可转化为pk8和x509.pem文件
前者使用JKS     后者使用公钥+私钥(k8格式) 是分开的
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk

E:\sbinj\trunk\sign>jarsigner -verify settings.apk
jar 已验证。

(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
(3)如果要正式发布一个Android ,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值