2022-06-24 关于android的签名jks的替换尝试.

2022-06-24 关于android的签名jks的替换尝试.,第1张

android developer 开发者

掘金博客

首先这个需求是因为客户安全部门对我们的apk进行安全测试,发现我们apk的证书签名信息是不规范的,需要我们去修改证书里面的信息,于是乎,我们开始了修改写bug之路.

实现android apk 证书签名的信息替换

至于什么是敏漏keytool,这里不再赘述,自行百度.

这里需要注意的是你们需要替换的内容是KEY_ALIAS_OLD=“老的jks的别名”,KEYSTORE_PASSWORD_OLD=”老的jks的库密码“,KEY_PASSWORD_OLD = “老的jks的别名密码”

剩下的也是依次替换就行了,然后会在你所在执行命令的目录下,生成一个lineage文件,这个文件非常重要

,相当于轮替文件的内容,下面我们在执行这个命令脚塌拿含本

这里需要注意的是这两个占位符号LINEAGE = “lineage的文件路径” ,OUT_FILE="新生成的apk的路径",

这样你就会得到签名后的apk,在执行apksigner verify --verbose 命令 ,你就能看到是否开启V3

这样能看到,V3开启,还有V4的彩蛋,当然,V4,在官网还没有更新出文档.

所以我们就可以把这个apk当成我们签名过度的apk,我们称之为transition.apk,那我们后续升级的安排,就可以是 old.apk->transition.apk->直接使用新的签名的apk,从而,完成apk的签名更新,

这个流程虽然可以解决签名替换的问题,但是,问题是,这个只在大于等于android9的机型上才会生效,经过测试,我自身的android 11 手机是可以的,android 9以下的手机还未测试,等待我后续更新,根据掘金的博主和google爸爸的描述中可以得出,只有在支持V3的手机上才会生效,而且,应用上架除非应用市场将其检验方式换成V3的应团笑该就可以了,可是并非所有版本的Android系统都可以直接覆盖安装,所以就算是安全上架了,系统版本低的还是要卸载才能安装。所以,看的出来V3在解决这个问题,那么V4呢,这个google爸爸留给我们的惊喜,不知道能不能彻底解决证书替换的问题.

由于部分应用市场要求上传keystore而我一般都是直接用Android studio直接生成的jks打包的!

生成 .jks 这里就不过多陈述了 , 接下来我们会在 doc 或者 Terminal 中进行命令 *** 作

这里替换掉你的 .jks 路径以及要生成 .p12 文件的名称(会生成在与你 .jks 文件同级目录下

这里需要注意的是,运行过程中需要输入秘钥口令拍咐御等(还记的曾经的'123456'么TVT)。

又因为密码简局是不可见的,所以你大胆的输入密码然后 回车 就好!

这里需要替换的位置和步骤一类似袭岩

这样就成功了

需要注意的是:在执行doc命令之前,导入的keystore文件要不存在!

更多转换命令请转至 https://www.jianshu.com/p/e8aec69a5daa 查看,感谢您支持!

也不知到当初是那条筋搭错了,将证书的时间弄得这么短,在这里强烈的提醒一下各位,在生成证书的时候一定要注意一下时间,一般将时间设在25年以上就可以了(上架到google play是必须在25年以上的)。现在证书过期了,那么没办法,只能换了,直接替换证书会有一个问题就是需要将之前的旧证书的app卸载之后才能重装。这就问题大了。这样用户的数据不就没了吗?看来还是得找别的方案。

用过Android studio的打包就会知道,在签名那块是有V1和V2两种的,勾选就可以了,使用 gradlew 命令去打包的也可以在 build.gradle(app) 中设置的:

V2,解决了V1不安全的问题。V3要解决的问题就是让不同证书之间可以平滑过渡。(但是V3签名方式是有限制的,下面再说)

看了一下官方,发现签名方式有V3了(悄悄地告诉你,还有V4了)。于是就看了一下,大致的签名方式是这样的:

首先,你得准备一些文件:

old_project.jks (旧冲厅明的证书,在我这就是我那过期的证书)

new_project.jks (新的)

old.apk(一个使用旧证书打包的apk,没有证书的也行)

apksigner(用于apk签名的工具,请使用29.0.2以上的,这个是在sdk中build-tools文件夹下找到的)

第二步:这一步称之为轮替,也叫沿袭,生成 lineage ,通过下面这条命令就可以了:

这样就会在当前文件夹下新生成一个名为“lineage”的文件。(这个文件很重要),这一步是必须旧证书在前,新证书在后,这样才是一个正确的轮替。(虽然换过来也是成功的)

第三步:使用上面所有的东西(包括生成的lineage)作V3签名:

这样就完成了,你可以通过命令去检查一下是否已经是启用了V3

可以看到V3的那一行已经是true了。

真正研究过之后发现,V3签名,很是鸡肋:

首先,V3是android 9.0开始支持的。也就是说如果你的手机是Android9.0之前的,都不能散告覆盖安装,第二,由于证书过期了,那么就是说无法上架到应用宝(可能有些应用市场是能上的,但是大多数应用市场是上不了的),那么使用V3签名方式打包之后的apk,由于打包过程使用了个密钥库(也就是两个 .jks 文件),你猜猜apk的签名是谁的呢?使用 keytool -list -printcert -jarfile 命令查看了一下,是旧的!!!(也就是轮替的时候放在前的证书)。所以依旧是上架失败的!!!白忙活了。除非应用市场将其检验方式换成V3的应该就可以了,可是并非所有版本的Android系统都可以直接覆盖安装,所以就算是安全上架了,系统版本低的还是要卸载才伏御能安装。可能应用市场也是基于这个考虑吧。

如果需要更详细的了解V3签名方案,可以查看官方文档 Apk签名方案V3

更加详细的签名 *** 作可以看这里 apksigner

希望大家在开始项目的时候一定要检查一下使用的证书是不是有问题。如果有,赶紧重新弄一个!!!!!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12259274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存