无法使用 Google Play 应用签名上传证书更新发布 APK(使用原始密钥库)
Posted
技术标签:
【中文标题】无法使用 Google Play 应用签名上传证书更新发布 APK(使用原始密钥库)【英文标题】:Cannot update release APK using Google Play app signing upload certificate (with original keystore) 【发布时间】:2018-01-28 20:29:51 【问题描述】:我正在尝试更新 Google Play 上的版本。上传我签名的 APK 后,我在 Google Play 控制台中收到了以下错误消息:
您上传的 APK 未使用上传证书进行签名。您必须使用相同的证书。上传证书有指纹:
[ SHA1:(SHA1 哈希已编辑) ]
并且用于签署您上传的 APK 的证书有指纹:
[ SHA1:(不匹配的 SHA1 哈希已编辑) ]
我尝试了许多不同的方法来签署我的 APK(原始密钥库、不同的密码组合、新的密钥库、不同的密钥组合等),但都没有成功。
我相当确信密钥库是原始密钥库,因为我已将它备份在外部驱动器上,并且两个版本的文件的更新日期都比原始版本早了大约 30 分钟(那时我生成了第一个签名的 APK)。
由于我使用了 Google Play 应用签名(并且预期的 SHA1 哈希与我的 Play 控制台上的“应用签名”选项卡中的上传证书 SHA1 哈希相同)我认为我需要将证书导入到我的密钥库中用于上传原始版本 APK。
这是我的结果,我已经反复检查了一段时间,以确保它们不是由简单的错字引起的(编辑部分按值分组为颜色,如有必要,我可以发布大部分):
请注意,keystorePass
和实际的 keyPass
被指定为不同的通道,因此对两者使用 keystorePass
会返回“无法恢复密钥”UnrecoverableKeyException,而使用 keyPass
作为密钥会给出一般情况异常“回复中的公钥和密钥库不匹配。”
我的一些研究表明,如果keystorePass
和keyPass
不相同,就会出现这个问题。建议的解决方案是使用 keytool 将keyPass
更改为与keystorePass
相同,但是在我认为成功的 keytool keypasswd 更改之后,我仍然收到异常“回复的公钥和密钥库不匹配。”使用旧的 keyPass
会返回预期的错误密码异常。截图如下:
出于故障排除的目的,我尝试将证书直接添加到密钥库中。这是使用keystorePass
的成功,并为我提供了来自Google Play 应用签名的uploade_cert.der
文件的预期SHA1 哈希:
我还尝试创建一个新的密钥库(以及具有相同密码的原始密钥库和新密钥库中的新密钥),但尝试在成功导入密钥工具上传证书后使用带有新密钥库的 android Studio 生成签名 APK ,我收到此 Android Studio 错误:“受信任的证书条目不受密码保护”
我已经在我的 gradle 应用文件 (signingConfigsreleasekeyAlias, keyPassword, storeFile, storePassword
) 中使用原始和新信息尝试了所有这些步骤,但没有运气。很想更新我的应用程序,任何提示或帮助将不胜感激。
【问题讨论】:
更改密钥别名的密码以匹配密钥库工作正常,但无论如何尝试访问密钥库时,密钥库密码都会失败,并显示“回复的公钥和密钥库不匹配”——不是“密钥库被篡改或密码不正确”的常见错误传递错误。另外,再次尝试将密钥别名密码更改为与密钥库相同的密码可以使密钥库密码通过验证,但是在输入密钥密码时会出错:“密码必须不同”,这意味着它确实是相同且正确的密钥!什么? :P 我通过列出密钥库中的密钥进行了检查,它接受了密钥库传递没有问题,即使它不会接受 importcert keytool 命令。 我还专门检查了密钥别名本身的 keytool 列表,该命令也可以正常使用密码。那么为什么我不能导入证书呢? 【参考方案1】:您必须尝试以下步骤:
-
使用用于签署 APK 第一个版本的 PEPK 工具(在您的 Google 控制台上提供)加密您的私钥 (yourKeyStore.jks)。
生成一个新密钥(例如 apk-upload),然后从您在 upload-key.pem 中创建的密钥中提取证书。
将 upload-key.pem 上传到您的 Google 帐户。
使用您的新密钥 (apk-upload) 为您的发行版 APK 签名。
您将在本文中找到不同的命令和更多详细信息:
https://medium.com/mindorks/securing-and-optimizing-your-app-with-google-play-app-signing-24a3658fd319
编辑:(来自 cmets)我认为,如果您已经注册了 Google App Signings,则必须联系 Google 支持以让您能够上传新的私钥或让您获得旧的私钥关键...当您订阅 Google App Signings 时给出的选项,我认为如果您已经注册了 Google App Signings,则无法以旧方式退出您的应用程序。
(提问者的编辑:不要为您的密钥库使用不同的密码,就像您使用原始密钥别名本身一样。确保 keystorePass 和 keyPass 完全匹配。如果您已经上传了您的具有不同通行证的密钥库/密钥,然后按照 Google 支持页面上的步骤使用应用签名重置您的密钥库。)
【讨论】:
你应该启用谷歌应用签名:***.com/a/44103025/8126192 我认为,如果您已经注册了 Google App Signings,则必须联系 Google 支持,以便您能够上传新私钥或获取旧私钥。 i1.wp.com/blog.fossasia.org/wp-content/uploads/2017/08/… 您可以在上面的链接中看到您订阅 Google App Signings 时提供的选项,我认为如果您已经注册了 Google App Signings,则无法以旧方式退出您的应用程序。谢谢 我已经就这个问题联系了 Google Play 管理中心。不幸的是,回复与问题无关,我仍在等待他们的支持团队的相关回复。他们还假设我试图以旧方式签署我的 APK。如果我按照页面上的说明注册了 App Signing,我是否应该在 App Signing 页面上看到 PEPK 工具下载按钮以及其他按钮?正如我所说,我所看到的只是密钥哈希值——而且我从来没有将任何东西上传到 App Signing! Google App Signing 将启用,Google 将使用任意密钥作为应用程序的私钥,您上传的第一个应用程序会将其密钥注册为上传密钥。以下是我为新应用程序执行的步骤: 1- 下载上传证书并将其添加到您的原始密钥库(使用相同的别名,它应该告诉您替换现有的证书,说是): keytool -importcert -file upload_cert.der -keystore以上是关于无法使用 Google Play 应用签名上传证书更新发布 APK(使用原始密钥库)的主要内容,如果未能解决你的问题,请参考以下文章
Google Play 上新版本应用的上传失败并出现签名错误
Google Play - 应用程序包的错误签名密钥[重复]
您上传了未使用上传证书签名的APK - 即使我使用的是Google Play Signing
无法通过 fastlane 使用 Google Play 应用签名将 android 包上传到 Google Play