




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android应用签名机理什么是签名?Android要求所有已安装的应用程序都使用数字证书做数字签名,数字证书的私钥由应用开发者持有。Android使用证书作为标识应用程序作者的一种方式,并在应用程序之间建立信任关系。
证书并不用来控制用户能否安装哪个应用。
证书不需要由证书认证中心签名:完全可以使用自签名证书(self-signedcertificates)。没有正确签名的应用,Android系统不会安装或运行。此规则适用于在任何地方运行的Android系统,不管是在模拟器还是真实设备上。
因为这个原因,在真机或模拟器上运行或者调试应用前,必须为其设置好签名。为什么需要签名?开发Android的人很多,完全很能把类名、包名起成了同样名字,这时候如何区分?签名可以区分。开发商或恶意开发者可能通过相同的包名混淆替换已安装应用。签名可以保证相同包名但是签名不同的包不被替换。应用如果使用一种key签名,另一个key签名的文件将无法安装或覆盖老的版本。防止已安装的应用被恶意的第三方覆盖或替换。签名可以防止交易抵赖。签名策略推荐策略:在应用程序的整个生命周期,所有的应用程序使用相同的证书签名。Why?主要基于下面几种考虑:应用程序升级应用程序模块化代码/数据的授权共享--------------------------------------------------------------------如何设置签名应用key的有效期?确认key的有效期要比应用的寿命长,
推荐25年或者更长的有效期。Debug模式下的签名当用debug证书签名时,应用程序不能对外发布。公开发布应用如何签名?1.使用命令2.使用Eclipse/ADT3.使用ANT1.使用命令(1)获取一个合适的私钥(2)在release模式下编译应用程序(3)使用你的私钥对应用程序进行签名(4)使用zipalign来调整和优化APK包(1)获取一个合适的私钥通过Keytool生成一个自签名的key。Keytool选项描述-genkey生成一个keypair(公钥和私钥)-v允许详细内容输出.-alias<alias_name>key的别名.只会用到前8个字符.-keyalg<alg>生成key时的加密算法.支持DSA和RSA.-keysize<size>生成的key的大小(bits).如果不提供,Keytool使用默认的Key大小:1024.
通常情况下,我们推荐使用2048或者更大的key尺寸.-dname<name>描述key的创建者的标识名称.
在自签名证书中,本参数会出现在发布者和主题字段.
注意,不要在命令行下指定这个选项.此时Jarsigner会提示你输入每一个标识名称字段(CN,OU,等)-keypass<password>key的密码.安全起见,不要在命令行中包含这个选项.
此时Keytool会提示你输入密码.
这种方式中,密码不会被保存在shell历史数据中.-validity<valdays>key的有效期,以天数为单位.
注意:推荐使用10000或更大的数字.-keystore<keystore-name>.keystore保存私钥的keystore名称.-storepass<password>keystore的密码.
安全起见,不要在命令行中包含这个选项.
此时,Keytool会提示输入这个密码.
在这种方式中,密码不会被保存在shell历史数据中.
$keytool-genkey-v-keystoremy-release-key.keystore-aliasalias_name-keyalgRSA-keysize2048-validity10000(2)在release模式下编译应用程序使用Eclipse要从Eclipse导出一个未签名的.apk,在PackageExplorer中的project上点击鼠标右键,选择AndroidTools>ExportUnsignedApplicationPackage。然后给未签名的.apk指定一个文件路径。(或者在Eclipse中打开AndroidManifest.xml文件,点开Overview标签,然后点击Exportanunsigned.apk.)注意,完全可以在ExportWizard中执行整个的编译和签名步骤。(3)使用你的私钥对应用程序进行签名运行Jarsigner对应用签名,同时引用应用的.apk和用来签名.apk的私钥的keystore。Jarsigner选项Description-keystore<keystore-name>.keystore包含私钥的keystore的名称.-verbose允许详细输出.-storepass<password>keystore的密码,安全起见,不要把此参数包含在命令行中.
此时,Jarsigner提示输入密码.
这种方式下,密码不会被保存在shell的历史记录中.
-keypass<password>私钥的密码.
安全起见,不要把此参数包含在命令行中.
此时,Jarsigner提示输入密码.
这种方式下,密码不会被保存在shell的历史记录中.签名例子:$jarsigner-verbose-keystoremy-release-key.keystoremy_application.apkalias_name检查签名是否成功:$jarsigner-verifymy_signed.apk检查签名详细信息:$jarsigner-verify-verbose-certsmy_application.apk
(4)使用zipalign来调整和优化APK包安装在某个设备上时,确保4字节边界对齐的方式,提供了性能上的优化。当对齐后,如果它们包含有对齐限制的二进制数据,Android系统甚至可以使用mmap()读取文件,而不是从包里复制所有的数据.。另一个好处是在运行程序时,减少了内存消耗。zipalign工具由AndroidSDK提供,在tools/目录中。
要调整对齐签名后的.apk,执行如下命令:$zipalign-v4your_project_name-unaligned.apkyour_project_name.apk警告:在使用zipalign优化包之前,输入的.apk必须使用私钥签名过。如果在zipalign之后签名,将使之前优化对齐操作无效,回到未优化的状态。2.使用Eclipse/ADT如果使用Eclipse和ADT插件,可以用ExportWizard来导出一个签名的.apk(如果必要,甚至可以创建一个新的keystore.)ExportWizard为你处理所有Keytool和Jarsigner的交互操作,这允许使用一个GUI界面来操作签名包的过程,而不必人工处理各种编译,签名,以及优化对齐工作。
一旦向导编译并签名完.apk包,它将也使用zipalign对包进行优化对齐处理.因为ExportWizard使用到Keytool和Jarsigner,应当确保在电脑上可以访问到这2样工具。(1)在PackageExplorer中选中project,然后选择File>Export(2)打开Android文件夹,选择ExportAndroidApplication,然后点击Next(3)ExportAndroidApplication向导开始,它将引导你进行签名的整个过程,包括选择用于签名.apk的私钥(或者创建一个新的keystore和私钥)(4)完成ExportWizard后,应用程序将被编译,签名,对齐,做好了发布前的所有准备保证私钥安全下面是一些保证key的安全性的小提示。对keystore和key采用强密码当用Keytool生成key时,不要在命令行提供-storepass和-keypass选项参数。如果非这么做,你的密码将能够在shell历史中查到,这样将导致任何用户都能访问类似地,当使用Jarsigner签名应用时,不要在命令行提供-storepass和-keypass参数选项不要给任何人你的私钥,不要让未经授权的人知道你的keystore和key密码系统签名Auto-Sign工具的一条批处理命令:java-jarsignapk.jartestkey.x509.pemtestkey.pk8update.zipupdate_signed.zip这条命令的意义是:通过signapk.jar这个可执行jar包,以testkey.x509.pem这个公钥文件和testkey.pk8这个私钥文件对update.apk进行签名,签名后的文件保存为update_signed.apk”。
系统签名signapk.jar是Android源码包中的一个签名工具。由于Android是个开源项目,所以,很高兴地,我们可以直接找到signapk.jar的源码!路径为/build/tools/signapk/SignApk.java。对比一个没有签名的APK和一个签名好的APK,我们会发现,签名好的APK包中多了一个叫做META-INF的文件夹。里面有三个文件,分别名为MANIFEST.MF、CERT.SF和CERT.RSA。signapk.jar就是生成了这几个文件(其他文件没有任何改变。因此我们可以很容易去掉原有签名信息)。
系统签名1.生成MANIFEST.MF文件关键代码如下:
(1)Manifestmanifest=addDigestsToManifest(inputJar);
(2)je=newJarEntry(JarFile.MANIFEST_NAME);
(3)je.setTime(timestamp);
(4)outputJar.putNextEntry(je);
(5)manifest.write(outputJar);这里简单介绍下SHA1数字签名。简单地说,它就是一种安全哈希算法,类似于MD5算法。它把任意长度的输入,通过散列算法变成固定长度的输出(这里我们称作“摘要信息”)。你不能仅通过这个摘要信息复原原来的信息。另外,它保证不同信息的摘要信息彼此不同。因此,如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。
系统签名2.生成CERT.SF文件对前一步生成的Manifest,使用SHA1-RSA算法,用私钥进行签名。关键代码如下:(1)Signaturesignature=Signature.getInstance("SHA1withRSA");
(2)signature.initSign(privateKey);
(3)je=newJarEntry(CERT_SF_NAME);
(4)je.setTime(timestamp);
(5)outputJar.putNextEntry(je);
(6)writeSignatureFile(manifest,
(7)newSignatureOutputStream(outputJar,signature));
RSA是一种非对称加密算法。用私钥通过RSA算法对摘要信息进行加密。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息进行对比,如果相符,则表明内容没有被异常修改。
系统签名3.生成CERT.RSA文件生成MANIFEST.MF没有使用密钥信息,生成CERT.SF文件使用了私钥文件。那么我们可以很容易猜测到,CERT.RSA文件的生成肯定和公钥相关。CERT.RSA文件中保存了公钥、所采用的加密算法等信息。核心代码如下:(1)je=newJarEntry(CERT_RSA_NAME);
(2)je.setTime(timestamp);
(3)outpu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国IT分销投资商机市场前景预测及投资规划研究报告
- 中国单口网关项目投资可行性研究报告
- 直排式燃气壁炉行业行业发展趋势及投资战略研究分析报告
- 2025年中国自动光学检查行业市场供需格局及投资规划建议报告
- 专题07以双曲线为情境的定点问题(原卷版)-高考数学圆锥曲线部分必会十大基本题型
- 2025年马鬃尾油刷项目投资可行性研究分析报告
- 2025年中国变压器油基础油行业市场发展前景及发展趋势与投资战略研究报告
- 2024-2025学年高中历史专题5走向世界的资本主义市场4走向整体的世界练习人民版必修2
- 2024-2025学年高中历史专题七近代西方民主政治的确立与发展3民主政治的扩展练习含解析人民版必修1
- 2025-2031年中国有声阅读行业发展运行现状及发展趋势预测报告
- 2024年职教高考《机械制图》考试题库
- 2024改性沥青路面施工技术规范
- 九型人格与亲子教育课件
- 2025届高校毕业生公开招聘工作人员报名登记表
- DB34∕T 2290-2022 水利工程质量检测规程
- GB/T 44399-2024移动式金属氢化物可逆储放氢系统
- 薛岗小学反邪教工作计划
- 某住宅小区物业服务投标书范本
- 2024-2030年中国高空外墙清洗行业市场发展趋势与前景展望战略分析报告
- 2024年辽宁省中考生物试卷(含答案与解析)
- 医院殡葬服务管理制度
评论
0/150
提交评论