Android 签名密钥更改(不是 Play 商店分发的应用程序)

Android signing key change (not Play Store distributed app)

我有以下场景:

我们有一个关键的应用程序,它是通过从我们自己的服务器(而不是 Play 商店)下载 apk 来分发的。该应用程序通过下载并安装 apk(具有 android 意图)来更新自身和另一个应用程序。这两个 apk 都是由我们公司的代码签名密钥签名的。

问题:

签名密钥将在 5 天后过期,我们无法续订它,因为它是 2048 位 RSA。根据一些 CA/Browser 论坛文档:

Baseline requirements for code signing

但是如果我们把私钥改成3072bit RSA,android会拒绝安装(这个我理解):

Package com.whatever.myapp signatures do not match previously installed version; ignoring!

有没有比卸载并重新安装该应用程序更能减轻用户痛苦的方法?(它在全国范围内分发,面向 1000 多个无法使用的客户这样做)。

更改包名称意味着为客户端提供干净的数据库,因此这不是一个可行的解决方案。这是真的吗,我无法获得 2048 位 RSA 私钥的有效签名?有什么解决办法吗?

提前致谢!

密钥不会过期,但证书会过期(或者至少它们有一个 NotValidAfter 字段)。也就是说,Android 不会验证证书的有效性,它只会强制证书逐字节保持不变,因此从技术上讲,拥有“过时”的证书不会对您的用户产生影响。

如果您仍想更改密钥,则必须使用 密钥轮换 (https://source.android.com/security/apksigning/v3),这是 [=18] 中引入的功能=] 9,因此只有 Android 9+ 的用户才能使用新密钥验证签名,而旧设备上的用户将继续使用旧密钥验证签名。