我有一个Android应用程序。我在Google Play上发布了这个应用程序作为APK。这个应用程序是由我拥有的签名密钥签名的:
- 私钥:我们将其命名为A-RSA4096
- 证书:我们将其命名为C1-几年前使用SHA1创建
现在:我的目标是基于密钥A创建一个新证书(我们将其命名为C2),但将摘要算法从SHA1更改为SHA256。我希望通过使用A + C2签名来发布新版本的应用程序。我甚至可以将C2上的所有字段和有效时间设置为与C1中相同。只有摘要会更改。
而问题是--我使用A + C2发布和签名的应用更新会有问题吗?
AFAIK要验证应用程序的未更改源代码,只需验证用于签名的公钥就足够了。在我的例子中-C2与C1具有相同的公钥。
那么实际上如何在APK更新上验证签名?检查以下哪一项:
- 私钥/公钥?(如果您有私钥,则可以获得公钥)
- 证书?
- 证书字段?
- 还有别的事吗?
有消息称,同样的证书很重要:
- "如果软件包名称和签名证书与现有版本不匹配,Market将认为它是一个新应用程序,不会将其作为更新提供给用户。"(参考:https://stackoverflow.com/a/4843261/1961303)
- "App upgrade: When the system is installing an update to an app, it compares the certificate(s) in the new version with those in the existing version. The system allows the update if the certificates match." (refs: https://developer.android.com/studio/publish/app-signing#considerations )
有些人似乎认为,也许只有私钥需要相同:
- "However, because users can only update your app if the update is signed with the same signing key, it's difficult to change the signing key for an app that's already published." (refs: https://developer.android.com/studio/publish/app-signing#upgrade_key )
1条答案
按热度按时间0dxa2lsx1#
Android平台将在已安装的APK和要安装的APK之间逐字节比较证书。
因此,您不能从同一密钥创建新证书,并期望更新是无缝的。
您可以选择使用密钥轮替,这是Android 9中引入的一个选项:https://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation