Android如何安全替换证书

  • 证书过期了?!!
  • V1和V2签名方式
  • V3签名方式
  • 鸡肋的V3
  • 最后

证书过期了?!!

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

V1和V2签名方式

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

signingConfigs {release {//code...v1SigningEnabled true //启用v1v2SigningEnabled true //启用v2}
}

V3签名方式

V2,解决了V1不安全的问题。V3要解决的问题就是让不同证书之间可以平滑过渡。(但是V3签名方式是有限制的,下面再说)
看了一下官方,发现签名方式有V3了(悄悄地告诉你,还有V4了)。于是就看了一下,大致的签名方式是这样的:
首先,你得准备一些文件:
old_project.jks (旧的密钥库)
new_project.jks (新的)
old.apk(一个使用旧密钥库打包的apk,没有证书的也行)
apksigner(用于apk签名的工具,请使用29.0.2以上的,这个是在sdk中build-tools文件夹下找到的)
第二步:这一步称之为轮替,也叫沿袭,生成lineage,通过下面这条命令就可以了:

apksigner rotate --out lineage --old-signer  --ks  old_project.jks --new-signer --ks  new_project.jks

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

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

apksigner sign --ks old_project.jks --next-signer --ks new_project.jks --lineage lineage --out release.apk --in old.apk

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

apksigner verify --verbose release.apk


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

鸡肋的V3

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

最后

如果需要更详细的了解V3签名方案,可以查看官方文档Apk签名方案V3
更加详细的签名操作可以看这里apksigner
密钥库(.jks)也可以被称作为证书,以下是android官方文档的原文:

Java 密钥库(.jks 或 .keystore)是用作证书和私钥存储库的二进制文件。

无论称呼为什么,只需要知道(.jks)文件是用来给你的app签名用的就可以了。

Android如何安全替换证书相关推荐

  1. Android用省略号替换“...”

    本文翻译自:Android Replace "-" with ellipsis character Since AVD tools 16 I'm getting this warn ...

  2. Android 根证书管理与证书验证

    PKI 体系依赖证书执行极为关键的身份验证,以此确认服务端的可信任性.证书验证在 SSL/TLS 握手过程中完成,验证过程通常包含三个步骤: 验证证书的合法性:这一步主要是验证证书是由合法有效的 CA ...

  3. Android之android studio如何获取证书指纹 (SHA1)

    android studio如何获取证书指纹 (SHA1) 为什么要用SHA1 我们做百度地图或是高德地图的时候.注册app信息要求填写数字签名  我们可以通过外部命令行获取,也可以通过eclipse ...

  4. Android打包使用自有证书认证

    Android打包使用自有证书认证步骤如下 将jdk1.7放到项目文件夹下,打开jdk1.7文件夹找到bin文件夹复制路径.如: 2.打开命令行   cmd 输入一下命令 如图:  根据提示一次输入信 ...

  5. 生成android使用的BKS证书

    生成android使用的BKS证书 android 系统中使用的证书要求以BKS的库文件结构保存,通常情况下,我们使用java的keytool只能生成jks的证书库,如果生成BKS的则需要下载BC库, ...

  6. K8S证书过期解决办法之替换证书

    目录 1 证书过期的情况 2 Kubernetes环境介绍 3 替换证书步骤 3.1 在master上查看各证书的过期时间 3.2 查看master(192.168.0.190)上kubelet证书列 ...

  7. Android开机图片替换

    Android开机图片替换 Android从启动到进入Launcher一共会展示三张图片,如果只是更换静态图则更换这三张图片即可,要想换成动画那就要另外操作. 首先查找这个文件:    /bootab ...

  8. Android Studio生成签名证书以及证书指纹信息的获取

    因为Android 要求所有 APK 必须先使用证书进行数字签署,然后才能安装.所以使用签名证书给APK签名是应用上架前必不可少的过程. 这里记录下通过Android Studio 生成签名证书以及证 ...

  9. Android WebView访问SSL证书网页(onReceivedSslError)

    Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebView ...

最新文章

  1. digitalocean添加ssh_keys
  2. 项目上传github步骤
  3. maven里如何根据不同的environment打包
  4. 【最新合集】PAT乙级最优题解(题解+解析+代码)
  5. Java 9中的进程处理
  6. 【Python】Python库之数据可视化
  7. 文件服务和对象存储服务器,对象存储与块存储服务
  8. 装完Ubuntu 9.10后要干的事
  9. iOS开发SDWebImage源码解析之SDWebImageManager的注解
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_汇总
  11. attrib批量显示文件夹_CMD中使用attrib命令设置文件只读、隐藏属性详解
  12. c# winform Get请求接口
  13. 融思杯 第三届 部分wp
  14. U盘写保护,不能被格式化
  15. android 动态磁贴,善用动态磁贴和Xbox游戏
  16. centos7安装的大致步骤
  17. CF1635E Cars
  18. licode的ios最新版本的接入
  19. 动态gif图如何在线制作?gif动图制作在线如何操作?
  20. 引领智能家居新浪潮 走进云图全场景智能家居数字照明

热门文章

  1. python爬取启信宝_requests,lxml爬启信宝
  2. vscode ssh远程输入密码之后无反应,一直提示输入密码
  3. opencv中 equalizeHist()均衡化直方图
  4. 【步兵 c++】教科书般的A*寻路算法
  5. 进程的五种基本状态VS活动就绪静止就绪活动阻塞静止阻塞
  6. Python——文件与IO
  7. iphon44s图片的缩放
  8. 黯然销魂者,惟别而已矣。
  9. oracle 表信息查询,oracle 表信息查询
  10. android手环通信协议,BLE通信协议