Android签名密钥更改(非Play Store分发应用)



我有以下场景:

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

问题:

签名密钥将在5天后过期,我们无法更新,因为它是2048位的RSA。根据一些CA/浏览器论坛文档:

代码签名的基线要求

但是如果我们将私钥更改为3072位的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),这是Android 9中引入的一个功能,因此只有Android 9+的用户能够用新密钥验证签名,而旧设备的用户将继续验证旧密钥的签名。

最新更新