`
liuguofeng
  • 浏览: 450593 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

android apk签名(为什么 如何做 验证) -- 转

    博客分类:
  • Java
 
阅读更多

android apk签名(为什么 如何做 验证)

这篇文章其实就是根据自己的疑问然后结合多个文章结合成的

文章引用:

  http://liangxh2008.blog.163.com/blog/static/112411679201041321646855/<?XML:NAMESPACE PREFIX = O />

http://www.pgcw.com.cn/Newsdetail.asp?id=257565010

http://www.eoeandroid.com/thread-23010-1-1.html

http://pepa.iteye.com/blog/250991

http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=36678

http://blog.csdn.net/wenhaiyan/archive/2010/04/23/5520964.aspx

http://jojol-zhou.iteye.com/blog/719428

一、为什么要签名: 

1、发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2、保证信息传输的完整性,签名对于包中的每个文件进行处理,以此确保包中内容不被替换,防止交易中的抵赖发生,Market对软件的要求

二、签名的说明:
1、所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
2、Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
3、如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布
4、 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
5、签名后需使用zipalign优化程序
6、Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序
三、签名的方法:

1、  用eclipse插件方式签名

2、  调试签名

eclipse插件默认赋予程序一个DEBUG权限的签名,此签名的程序不能发布到market上,此签名有效期为一年,如果过期则导致你无法生成apk文件,此时你只要删除debug keystore即可,系统又会为你生成有效期为一年的新签名
b) 开发者生成密钥并签名
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed ApplicationPackage…,即可通过eclipse自定义证书并签名
c) 开发者导出未签名的包
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed ApplicationPackage…,即可导出未签名的包,之后可通过命令行方式签名

3、用命令行方式签名
使用标准的java工具keytool和jarsigner来生成证书和给程序签名
a) 生成签名
$ keytool -genkey -keystorekeyfile -keyalg RSA -validity 10000 -aliasyan
注:validity为天数,keyfile为生成key存放的文件,yan为私钥,RSA为指定的加密算法(可用RSA或DSA)
b) 为apk文件签名
$ jarsigner -verbose -keystorekeyfile -signedjar signed.apk base.apkyan
注:keyfile为生成key存放的文件,signed.apk为签名后的apk,base.apk   为未签名的apk,yan为私钥
c) 看某个apk是否经过了签名
$ jarsigner –verify my_application.apk

例如:jarsigner -verify -verbose -certs abc.apk

每个签名的apk都会看到如下信息

sm    152412 Wed Oct 14 14:16:52 CEST 2009 classes.dex

X.509, CN=Meebo, OU=Meebo, O=Meebo, L=Mountain View, ST=California, C=US

[certificate is valid from 28/10/08 06:49 to 13/08/82 07:49]

否则就是没有签名
d) 优化(签名后需要做对齐优化处理)
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk 

4、在源码中编译的签名
a) 使用源码中的默认签名
在源码中编译一般都使用默认签名的,在某源码目录中用运行
$ mmshowcommands能看到签名命令
Android提供了签名的程序signapk.jar,用法如下:
$ signapk publickey.x509[.pem]privatekey.pk8 input.jar output.jar
*.x509.pem为x509格式公钥,pk8为私钥
build/target/product/security目录中有四组默认签名可选:testkey,platform, shared, media(具体见README.txt),应用程序中Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.
b) 在源码中自签名
Android提供了一个脚本mkkey.sh(build/target/product/security/mkkey.sh),用于生成密钥,生成后在应用程序中通过Android.mk中的LOCAL_CERTIFICATE字段指名用哪个签名
c)  mkkey.sh介绍
    i. 生成公钥
openssl genrsa -3 -outtestkey.pem 2048
其中-3是算法的参数,2048是密钥长度,testkey.pem 是输出的文件
    ii. 转成x509格式(含作者有效期等)
openssl req -new -x509 -keytestkey.pem -out testkey.x509.pem -days 10000 -subj‘/C=US/ST=California/L=Mountain [email=View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com]View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com[/email]’
    iii. 生成私钥
openssl pkcs8 -in testkey.pem-topk8 -outform DER -out testkey.pk8-nocrypt
把的格式转换成PKCS #8,这里指定了-nocryp,表示不加密,所以签名时不用输入密码

四、签名的相关文件
1) apk包中签名相关的文件在META_INF目录下
CERT.SF:生成每个文件相对的密钥
MANIFEST.MF:数字签名信息
xxx.SF:这是JAR 文件的签名文件,占位符 xxx标识了签名者
xxx.DSA:对输出文件的签名和公钥
2)相关源码

五、签名的相关问题
一般在安装时提示出错:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
1)        两个应用,名字相同,签名不同
2)        升级时前一版本签名,后一版本没签名
3)        升级时前一版本为DEBUG签名,后一个为自定义签名
4)        升级时前一版本为Android源码中的签名,后一个为DEBUG签名或自定义签名
5)        安装未签名的程序
6)        安装升级已过有效期的程序
6.         相关工具
1)        查看某个x509证书的的有效日期

签名具体步骤:

Apk签名首先要有一个keystore的签名用的文件.
keystore是由jdk自带的工具keytool生成的.具体生成方式参考一下:
开始->运行->cmd->cd 到你安装的jdk的目录这里我是 C:\Program Files\Java\jdk1.6.0_10\bin
然后输入:keytool -genkey -alias asaiAndroid.keystore -keyalg RSA -validity 20000 -keystore asaiAndroid.keystore
-alias 后跟的是别名这里是 asaiAndroid.keystore
-keyalg 是加密方式这里是 RSA
-validity 是有效期 这里是 20000
-keystore 就是要生成的keystore的名称 这里是 asaiAndroid.keystore
然后按回车
按回车后首先会提示你输入密码:这个在签名时要用的要记住了哦。
然后会再确认你的密码。
之后会依次叫你输入 姓名,组织单位,组织名称,城市区域,省份名称,国家代码等。
参考:

运行完可以在 C:\Program Files\Java\jdk1.6.0_10\bin 里找到刚才生产的keyStore文件

好现在开始给Apk签名了:
在 C:\Program Files\Java\jdk1.6.0_10\bin 还提供一个工具 jarsigner.exe
好现在可以在刚才的命令行后继续运行以下命令给APK签名:
jarsigner -verbose -keystore asaiAndroid.keystore -signedjar LotteryOnline_signed.apk LotteryOnline.apk asaiAndroid.keystore
-keystore:keystore 的名称
LotteryOnline_signed.apk  是签完名后的APK
LotteryOnline.apk 是签名前的apk
然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。
参考:

运行成功后在 C:\Program Files\Java\jdk1.6.0_10\bin 目录下会多出一个被签名的apk文件,
参考:

 

如果这种方法不行,可以试试eclipse自带的方法,也是引用“窃”别人的文章^-^

1.Eclipse工程中右键工程,弹出选项中选择 android工具-生成签名应用包:

2.选择需要打包的android项目工程:

3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见 第6和7步创建私钥文件:

4.输入私钥别名和密码:

5.选择APK存储的位置,并完成设置 开始生成:

6.没有私钥文件的情况,创建私钥文件:

7.输入私钥文件所需信息,并创建:

补充:

    如果需要最终发行你的android程序,必需为apk文件签名。这里apk和jar的签名方式都是一样的,使用sun jdk的jarsigner工具来完成,但是执行时会提示jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected xxx but got xxx bytes)这样的提示,

     这些问题主要是由于资源文件造成的,对于android开发来说应该检查res文件夹中的文件,逐个排查。这个问题可以通过升级系统的JDK和JRE版本来解决。

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/lvqiyong/blog/item/ef8a8657da8491deb645ae12.html
分享到:
评论

相关推荐

    Windows版本 Android Apk签名工具

    本篇将详细讲解Windows版本的Android Apk签名工具及其相关知识。 一、Android应用签名的重要性 Android系统要求每个发布到市场的APK文件都必须有一个数字证书签名。这个签名用于验证应用程序的开发者身份,确保应用...

    windows下android apk签名工具

    在Android应用开发中,APK签名是一个至关重要的步骤,它确保了应用的完整性和来源的可信性。在Windows环境下,开发者通常使用特定的工具来对APK进行签名,以使其能够在Android设备上顺利安装和运行。本文将详细介绍...

    微信签名工具Android 安装包(Gen-Signature-android.apk)

    这个签名验证了应用的来源和开发者身份,并且在安装过程中确保APK文件未被篡改。签名过程使用密钥对APK进行加密,这有助于防止恶意代码的注入,同时允许系统跟踪应用的更新。 接下来,我们要讨论的是`.jks`文件。这...

    android apk sha256哈希值签名验证示例

    Android系统在安装APK时会自动进行签名验证。如果签名无效,系统会阻止安装,并显示相应的错误消息。开发者还可以在代码中添加自定义的签名验证逻辑,比如在应用启动时进行验证。 5. **安全最佳实践** - 使用强...

    android10 apk签名文件

    在Android系统中,APK签名是一个至关重要的过程,它确保了应用的完整性和开发者身份的验证。在Android 10中,这个过程没有本质的变化,但随着系统的更新,签名文件的作用和安全要求更加严格。本篇文章将深入探讨...

    android apk签名工具

    本文将详细介绍Android APK签名工具及其使用方法。 Android Studio,作为官方推荐的集成开发环境,内置了签名工具,允许开发者轻松地为他们的应用签名。描述中提到的"android system signature tool"很可能是指`...

    Android Apk签名工具

    在Android开发过程中,Apk签名是一个至关重要的步骤,它确保了应用的安全性和完整性。本文将深入探讨Android Apk签名工具的使用,以及它在构建和发布Android应用过程中的作用。 首先,我们需要理解什么是Apk签名。...

    android Apk签名的3种方式

    验证Apk签名通常在安装过程中自动完成,Android系统会检查Apk的签名,确保其未被篡改。开发者也可以手动验证,使用`apksigner`工具,命令如下: ``` apksigner verify --print-certs &lt;apk_path&gt; ``` 这将显示Apk的...

    android apk 签名工具 通过该工具可替换系统APK

    在Android开发过程中,APK签名是一个至关重要的环节,它确保了应用的安全性和完整性。当我们谈论“android apk 签名工具”时,我们通常是指用于对Android应用程序进行签名的工具,以便它们可以在设备上安装和运行。...

    Android APK签名异常无法安装-INSTALL-FAILED-SHARED-USER-INCOMPATIBLE 解决

    在Android开发过程中,APK签名异常是一个常见的问题,特别是当出现"INSTALL_FAILED_SHARED_USER_INCOMPATIBLE"错误时,这通常意味着应用安装失败,因为应用的签名与已安装的共享用户ID的应用签名不匹配。本篇文章将...

    Android apk 签名工具

    3. **签名APK**:使用如 jarsigner 命令行工具或者专门的签名工具(例如本压缩包中的“apk签名工具apktool”),用私钥对APK进行签名。这一步会创建一个包含签名信息的.META-INF目录。 4. **ZIPalign**:签名后的APK...

    Apk签名工具(三种工具)

    它专为Android开发者设计,简化了APK签名流程。使用360签名工具,开发者无需掌握复杂的命令行操作,只需几步简单操作即可完成签名。该工具支持JDK和APKSigner两种签名方式,同时具备批量签名的功能,适合需要处理多...

    android-APK系统签名文件.rar

    一、APK签名的重要性 1. **验证身份**:签名是证明应用来源合法性和开发者身份的方式,确保用户下载的是来自可信源的软件,而非恶意篡改的版本。 2. **权限控制**:只有经过签名的APK才能安装到Android设备上,并且...

    android 对于apk签名汇总

    总结来说,APK签名是Android应用程序开发中不可或缺的一环,涉及到应用的安全、验证和更新。开发者需要理解签名的原理,掌握签名工具的使用,并妥善管理签名文件,以确保应用能够顺利发布和更新。通过深入理解这些...

    Android apk 空包签名说明

    例如,如果要签名的APK文件名为`OppoSignVerify.apk`,密钥库文件名为`android.keystore`,证书别名为`android.keystore`,则命令应为: ```shell jarsigner -verbose -keystore android.keystore -signedjar ...

    Android apk签名批处理脚本

    APK签名是Android安全模型的一部分,它通过数字签名技术对APK进行验证,保证应用未经篡改,并且可以追溯到开发者。Android系统在安装APK时会检查签名,如果签名无效或缺失,系统将不允许安装。 批处理脚本是一种...

    android开发 APK签名软件

    APK签名是Android系统用于验证应用来源和保持应用完整性的一种机制。每个APK在发布到Google Play或其他平台,或在设备上安装之前,都需要被签名。签名可以防止恶意篡改,并确保用户知道他们下载的应用来自可信的源头...

    Android系统签名APK

    APK签名的过程主要包括以下几个步骤: 1. **生成密钥对**:首先,开发者需要使用密钥生成工具(如Java的keytool)创建一个包含公钥和私钥的密钥对。私钥用于签名,而公钥则用于验证签名。 2. **构建APK**:开发...

    Android apk获得系统权限签名工具

    "Android apk获得系统权限签名工具"就是这样一个工具,它主要用于为APK文件添加或更新签名,以便在设备上获取更高的权限。 签名在Android中扮演着至关重要的角色,它是确保应用安全性和身份验证的关键。每个APK在...

Global site tag (gtag.js) - Google Analytics