Gradle21Android应用签名详解应用签名是一种数字签名,主要用来验证应用的完整性以及发布者身份认证。在

应用签名是一种数字签名,主要用来验证应用的完整性以及发布者身份认证。

在Android应用发布之前非常重要的一环就是应用签名,Android系统要求所有APK在安装到设备上或更新之前都必须使用证书进行数字签名,Android系统会验证应用的签名。

版本更新时,新版本APK必须使用相同密钥签名,否则无法覆盖安装;如果签名变更,也无法更新应用,必须卸载重新安装。可见签名对Android应用发布的重要性。

在Android中,签名一般包含三个信息,密钥库、秘钥和证书,在应用首次发布时,我们可以借助AndroidStudio工具来生成它们。

选择Build>GenerateSignedBundle/APK开始生成密钥库和秘钥。

选择签名类型,这里选择APK,然后点击Next按钮。

点击Createnew按钮来创建新的秘钥库文件,如果已有秘钥库文件,选择对应路径即可。

在表单中填写如下两部分信息。

填写完所有信息之后,点击OK按钮即可创建密钥文件。

密钥库和秘钥创建成功之后,会自动回到上一页并填充我们刚才填好的签名信息。

然后点击Next按钮,选择需要签名的构建变体。

一般选择release,也可以多选。

点击Create按钮即开始构建并签名了。

打包构建完成后,签名好的APK文件在app/变体/目录下:

上面可视化的签名打包方式,一般适用于临时构建,或应用渠道较少的场景。

好处是操作方便,不易泄露秘钥的密码等关键信息。

不足的是不适用自动化构建(CI/CD)场景,以及多渠道构建场景下,可能会出现渠道选漏的情况。

如果在工作中,渠道包是自动化构建的,那么就需要在build.gradle文件中进行签名配置了。

签名配置步骤如下:

第一步,在项目的根目录下创建一个名为keystore.properties的文件,并在其中包含以下信息:

storePassword=myStorePasswordkeyPassword=myKeyPasswordkeyAlias=myKeyAliasstoreFile=myStoreFileLocation第二步,在build.gradle文件中,按如下方式加载keystore.properties文件(必须在android代码块前面):

importjava.util.Propertiesimportjava.io.FileInputStreamvalkeystorePropertiesFile=rootProject.file("keystore.properties")valkeystoreProperties=Properties()keystoreProperties.load(FileInputStream(keystorePropertiesFile))android{...}...第三步,在signingConfigs{}中配置存储在keystoreProperties文件中的签名信息:

android{signingConfigs{create("config"){keyAlias=keystoreProperties["keyAlias"]asStringkeyPassword=keystoreProperties["keyPassword"]asStringstoreFile=file(keystoreProperties["storeFile"]asString)storePassword=keystoreProperties["storePassword"]asString}}...}第四步,在构建类型buildTypes中引用signingConfigs{}中的签名配置:

buildTypes{release{signingConfig=signingConfigs.getByName("release")//...}}最后点击Sync同步即可。

这样就可以使用命令./gradlewassembleRelease来进行批量签名打包了。

在本地开发阶段,AndroidStudio会自动生成Debug签名,无需手动配置,但是Debug签名无法用于应用发布。

v1签名(Jar签名):传统的JAR签名机制,验证速度慢,但兼容早期版本(7.0以前)。v1签名不保护APK的某些部分,例如ZIP元数据。

v2签名(APK签名方案):Android7.0引入,基于Merkle哈希树,比v1签名更安全,验证速度更快,支持Android7.0及以上。

v3签名(APK签名方案):Android9.0引入,继承了v2签名的性能优势和安全性,并对整个APK文件进行签名检查,还增加了秘钥轮换能力,就是允许对应用的签名密钥进行更新,而不会影响应用的安装和更新。

v3.1签名(APK签名方案):Fix版本,Android13.0引入,修复了v3方案中秘钥轮换的已知问题。

v4签名(APK签名方案):Android11.0引入,主要是在验证方面,提升了APK增量更新和安装速度。

美团基于v2签名方案的多渠道打包方案(walle)原理是:打包过程中在META-INF目录下添加空文件用来作为渠道的唯一标识。

在v3签名方案中,基于Merkle哈希树对整个APK文件进行签名检查,确保APK文件的完整性,对APK进行的任何修改都会使APK签名作废,从而导致安装失败。而META-INF作为APK的一部分(签名块),自然也是会被签名检查,且不能修改的。

所以这也是walle为什么会在Android9.0(v3)以后失效的原因。

那这几个签名方案怎么选呢?不妨先看看市面上大型APP它们是怎么选的?

v1、v2的兼容性和安全性不错,一般是必选的,v3、v4有新特性,性能较好,可以结合自己的项目按需配置(v4需要与v2或v3结合使用)。

确定了签名方案之后,就是怎么让签名方案生效了,这就需要在build.gradle文件中添加签名方案配置了。

示例配置如下:

//配置签名方案buildTypes{release{//...//启用v1签名v1SigningEnabledtrue//启用v2签名v2SigningEnabledtrue//启用v3签名v3SigningEnabledtrue//启用v4签名v4SigningEnabledtrue}}新的签名格式向后兼容,比如使用v3签名方案的APK可以在5.0的设备上安装,前提是包含v1签名方案。

以v4签名为例,验证流程如下:

在v2、v3、v4签名验证流程中,最大的区别在于,v2、v3的签名规则验证不通过会直接拒接安装,v4则是继续往下走。

查看一个已经签名的APK文件使用了哪种签名方案,通常需要一些工具来解析和分析APK的签名信息。

我们可以使用AndroidSDK提供的apksigner工具,apksigner主要用于签名和验证APK文件,通过apksigner可以查看APK的签名信息。

在使用apksigner之前,需要先确认环境变量是否配置正确。

以macOS系统为例:

找到~/.bash_profile或~/.bashrc文件,进入编辑。

在文件末尾添加以下内容:

exportPATH=$PATH:~/Library/Android/sdk/build-tools/33.0.1AndroidSDK路径和版本号替换成你自己的。

然后执行命令刷新文件是环境变量配置立即生效:

source~/.bashrc//orsource~/.zshrc5.5.2、apksigner使用配置好环境之后,执行以下命令:

apksignerverify--verbose--print-certs/Users/yechao/AndroidStudioProjects/GradleX/app/release/app-release.apkapk地址换成你自己的。

输出如下图:

下面来介绍几种常用的提取签名信息的方式。

signingReport是Gradle插件提供的一个能力,用于生成签名报告。

在Gradle面板中找到signingReport任务,app>Tasks>android>signingReport。

在执行signingReport任务前,确认在build.gradle文件中已经正确配置了signingConfigs。

双击执行signingReport任务,在构建日志中会同时输出debug和release签名信息。

如下图:

keytool是JavaSDK自带的一个工具,可以用来查看密钥库文件(例如.jks或.keystore)中的签名信息,包括SHA-1指纹。

keytool支持两种文件方式查看签名信息,分别是keystore和apk。

命令如下:

keytool-list-v-keystoreyour-keystore-file.jks输出:

keytool-printcert-jarfileyour-apk-file.apk输出:

如果签名文件丢失或者损坏,唯一的解决办法就是生成新的签名文件,但是会导致应用版本更新问题,需要用户卸载重装,沉没成本较大。

一些安全建议:

本章我们了解了Android应用签名的重要性、具体的实现方法,和签名方案的介绍及方案选择,还有签名验证流程,最后是一些关于签名安全的建议。

THE END
1.设置电子签名您的组织可能需要电子签名来满足监管和合规性要求,特别是如果您属于制药、食品和饮料或国防等行业。 电子签名用于确认和标识即将启动或审核计算流程的人员。 电子签名可用于关键业务程序。 电子签名功能内置于多个程序中。 对于任何数据库表和字段,您还可以设置自定义签名要求。 电子签名具有内置数字签名功能。 签署文档https://docs.microsoft.com/zh-cn/training/modules/manage-organization/4-signatures
2.电子签名制作方法及签名(通用11篇)篇4:电子签名制作方法及签名 关键词:空间节约XML;语言数字签名 中图分类号:TP311.52 文献标识码:A 1 引言 目前,随着医疗信息化建设的不断深入开展,国内的各个层级的医院已经普遍淘汰了纸质电子病历,采用电子病历系统,而电子签名法的诞生,意味着数字签名技术将逐步保障电子病历的安全性和保密性[1]。近年来,国内外医https://www.360wenmi.com/f/filefcmmcw3l.html
3.有效的电子合同与靠谱的电子签名上述签署流程,通过多重身份验证手段满足了电子签名的功能要求,因此法院也认定广州农商行与刘某之间的借款合同关系成立并生效。但刘某举证并主张提出,签署的电子借款合同创建时间、修改时间、创建者PDF制作者等等这些内容都是有过修改的,不是当初形成的版本,对涉案借款合同的真实性提出质疑。https://www.grandwaylaw.com/guofengshijiao/3930.html
4.java电子图章系统介绍包括加盖样章、文档签章、撤消签章、删除样章、文档验证、签章验证、签名验证、批量签章、批量验证、脱机验证、联机验证、查看证书、查看签章信息、全文批注、手写签批、文字签批、文档脱密归档、打印设置、文件打印控制、数字水印等功能,全文批注、手写签批、文字签批和数字水印功能在后面《客户端特殊功能模块》有详细介绍http://www.360doc.com/content/10/1202/14/3903749_74353131.shtml
5.数字证书范文11篇(全文)使用数字签名的前提是接收数据者能够确信验证签名时 (用发送者的私钥加密消息摘要) 所用的公钥确实是某个人的 (因为有可能有人假告公钥) 。数字证书可以解决这个问题。 数字证书含有两部分数据:一部分是对应主体 (单位或个人) 的信息, 另一部分是这个主体所对应的公钥。即数字证书保存了主体和它的公钥的一一对应关https://www.99xueshu.com/w/ikey2d4a81ow.html
6.微转播最高检印发《人民检察院办理网络犯罪案件规定》(全文)(二)社交、支付结算、网络游戏、电子商务、物流等平台的账户信息、身份认证信息、数字签名、生物识别信息等是否与犯罪嫌疑人身份关联; (三)通话记录、短信、聊天信息、文档、图片、语音、视频等文件内容是否能够反映犯罪嫌疑人的身份; (四)域名、IP地址、终端MAC地址、通信基站信息等是否能够反映电子设备为犯罪嫌疑人所http://www.ynyun.jcy.gov.cn/jcxw/202101/t20210126_3114522.shtml
7.实验报告[集锦15篇]3、对公钥进行验证并使之有效 当你获取某人的公钥时,将它添加到你的公开密钥环中。首先确定公钥的准确性。当你确定这是个有效的公钥时,你可以签名来表明你认为这个密钥可以安全使用。另外,你可以给这个公钥的拥有者一定的信任度表明 4、对E_mail进行加密和数字签名 https://www.ruiwen.com/shiyanbaogao/8221431.html
8.基于PKI技术的PDF签名签章文档验证方案研究与设计摘要:随着互联网和数字化转型的快速发展,电子文档签名和签章技术已成为数字化时代的重要环节,广泛应用于合同签署、电子商务和电子档案管理等领域,而接收者如何正确有效验证以确保文档的真实可靠显得尤为重要。基于当前对电子文档验证的实践,从电子签名法可靠电子签名要求出发,对文档结构、验证关键点和验证流程深入分析,阐述https://www.wosign.com/article/tech/2789.html
9.基于PKI技术的PDF签名签章文档验证方案研究与设计摘要:随着互联网和数字化转型的快速发展,电子文档签名和签章技术已成为数字化时代的重要环节,广泛应用于合同签署、电子商务和电子档案管理等领域,而接收者如何正确有效验证以确保文档的真实可靠显得尤为重要。基于当前对电子文档验证的实践,从电子签名法可靠电子签名要求出发,对文档结构、验证关键点和验证流程深入分析,阐述https://www.360doc.cn/article/31916690_1125094882.html
10.电子公章如何申请(电子公章印章申请流程)电子合同网上有很多电子公章制作方法,比如PS制作公章、Word制作公章,这些都不是真正的电子印章!电子公章有效性主要靠CA认证和数字签名实现,今天就为大家介绍电子公章如何申请,电子公章印章申请流程。 电子公章如何申请 电子公章并不是简单电子化的公章图形,而是基于可信密码技术生成身份标识,以电子数据图形表现的印章,其内容包括公章https://m.fadada.com/notice/detail-18900.html
11.Android应用程序数字签名流程参考资料资源数字签名流程 5星· 超过95%的资源需积分: 9184 浏览量2011-11-27上传174KBRAR 在Android应用开发中,数字签名是一个至关重要的环节,特别是在应用程序发布之前。数字签名的主要目的是确保应用的完整性和开发者身份的验证,防止应用被篡改,并允许用户信任并安装该应用。下面将详细介绍Android应用程序的数字签名流程。 https://download.csdn.net/download/ypppk/3848432
12.以电子签名形式订立的合同具有证据效力吗?丨案例参考册尽管《电子签名法》对于可视为电文数据原件的要求作了详细规定,但上述规定并不能很好解决实务中的难题。 对此,2020年施行的《最高人民法院关于民事诉讼证据的若干规定》(以下简称《民事诉讼证据规定》)明确规定电子数据的制作者制作的与原件一致的副本,或者直接来源于电子数据的打印件或其他可以显示、识别的输出介质,视https://www.jfdaily.com/sgh/detail?id=708284
13.商品防伪码标签,商品的防伪码制作流程在当今市场竞争日益激烈的环境下,商品防伪成为了维护消费者权益、保护企业品牌声誉的重要手段。商品防伪码标签作为一种重要的防伪措施,通过独特的编码和验证方式,确保商品的真实和可靠。本文将详细介绍商品防伪码标签及其制作流程。 商品防伪码标签概述 商品防伪码标签是一种特殊标识,通常由印有特定信息的特殊材料制成。这https://www.315fangwei.com/315wenda/47856.html
14.天津医科大学总医院滨海医院信息化建设需求数字化医院20.数字签名:数字签名符合《电子签名法》和CA认证的要求。 21.应急系统:建设门诊收费、门诊药房应急系统,当服务器或网络发生故障时,能保证门诊基本的工作流程能继续进行。 22.手术麻醉:实现手术麻醉临床业务的数字化管理。 23.重症监护:实现重症监护的设备数据的自动化采集、动态监控等全业务过程的数字化。 http://www.his2000.com/news/328.html
15.电子签名信息验证方法与流程.docx电子签名信息验证方法与流程摘要本文介绍了电子签名信息验证的方法与流程。电子签名是一种用于验证电子文件真实性和完整性的技术手段,它在各个行业中得到广泛应用。本文将从电子签名的定义和基本原理开始,逐步介绍电子签名信息验证的具体方法与流程,并讨论https://www.renrendoc.com/paper/287665893.html
16.数字签名怎么申请?有什么办理流程?有什么办理流程? 在数字化浪潮席卷的当今时代,数字签名已然成为确保文件安全、验证身份的关键手段。其不仅极大地提升了工作处理的效率,更确保了文件签署的合法性及安全性,从而得到广泛认可和应用。那么,数字签名怎么申请呢? 数字签名怎么申请,需要先准备材料:https://qian.tencent.com/document/news146742523809120256/
17.iOSapp签名图解苹果app签名流程,深入分析表弟:我也看懂了公钥PkA,存在于所有的iOS设备,用于在安装应用时,验证证书中的公钥PkL是没有被篡改的; 公钥验证签名的流程可以参考文末给出的有关 数字签名 的文章. 4.2 验证源代码 用经过验证的公钥PkL去验证App源代码是没有被篡改的; 4.3 iOS设备安装程序 经过双重验证后,最终可以确认App是经过苹果验证没有篡改的,并且程序所使https://www.jianshu.com/p/871210f93ff4
18.开发ssl证书申请讲解帮助文档(5)会话密钥用于加密SSL通信过程中的数据。 总之,SSL证书是一种用于保护网站通信安全的数字证书,其原理是使用公钥加密技术来保证通信的安全性。在申请SSL证书时,需要选择适合自己网站的证书类型,并通过一系列验证流程来确认申请人的身份和网站的合法性。http://www.yimenapp.cn/yun/2023/6032/
19.SSL证书服务–又拍云CSR 是制作 SSL 证书的必要文件,通常由 CA 机构自动生成,用户也可自己创建,在生成 CSR 文件 的同时也会生成私钥(由用户自己保管),用户只需把 CSR 文件提交给 CA,CA 使用其根证书私钥对 CSR 文件签名即生成了用户的证书。RSARSA 公钥加密算法是 1977 年由 Ron Rivest、Adi Shamir、Leonard Adleman 一起提出https://help.upyun.com/knowledge-base/ssl-product/