Android 如何使用多个证书签署APK?

Android 如何使用多个证书签署APK?,android,google-play,Android,Google Play,如何使用多个证书签署APK,以便在发布到Android Market时可以这样做: 版本1.0=>使用证书A签名 版本2.0=>使用证书A和B签名 版本3.0=>使用证书B签名 Android Market确实给了我一些希望,但我不确定该怎么做,当我上传不同的签名证书时,它给了我以下信息: “apk必须使用至少一个与以前版本相同的证书进行签名。” 动机: 我已经在市场上发布了一个应用程序,使用Android签名工具作为MotoDev Studio for Android的一部分。问题是它自己处理

如何使用多个证书签署APK,以便在发布到Android Market时可以这样做:

版本1.0=>使用证书A签名
版本2.0=>使用证书A和B签名
版本3.0=>使用证书B签名

Android Market确实给了我一些希望,但我不确定该怎么做,当我上传不同的签名证书时,它给了我以下信息:

“apk必须使用至少一个与以前版本相同的证书进行签名。”

动机:
我已经在市场上发布了一个应用程序,使用Android签名工具作为MotoDev Studio for Android的一部分。问题是它自己处理密钥,并且没有办法(记录)获取它们。我想将其更改为使用密钥库和证书,即使我不再使用MotoDev Studio,我也可以对其进行更多控制并使用它。此外,MotoDev Studio似乎会将您锁定在共享库等新功能之外


2011年5月3日更新:
他们实际上在更新MotoDev Studio时非常迅速,但我似乎认为谷歌仍应为那些想要更改其应用程序证书的人提供解决方案。更新应用程序以使所有应用程序都使用相同的证书,随着时间的推移创建新的证书,并可能创建一个新的证书,以便您可以将应用程序的支持和分发交给其他人。

如果您想多次签署APK,只需这样做。
但请注意,Google Play不接受带有多个签名的APK。

例如,您可以在命令行中使用
jarsigner
如下所示:
jarsigner-密钥库原始密钥库my-app-unsigned.apk密钥别名
alias

然后用第二个键重复此操作:
jarsigner-keystore新签名keystore my-app-unsigned.apk密钥别名

别忘了事后跑步:
zipalign-v4 my-app-unsigned.apk my-app.apk



我刚刚重读了关于MotoDev studio的部分。在这种情况下,您可以像往常一样先使用MotoDev对APK进行签名,然后在命令行上使用新密钥进行签名。

我今天遇到了这个问题,下面是我所做的:

  • 备份旧的motodev.keystore文件
  • 使用最近的motodev studio(2.0.1)更改我的motodev.keystore密码(在可以导入密钥库的motodev视图中更改密码)
  • 使用与java捆绑的keytool.exe程序,将motodev密钥库文件(JCEKS类型)转换为常规android密钥库文件(JKS类型):
  • keytool-importkeystore-srckeystore motodev.keystore-srckeystoretype JCEKS-destkeystoreandroid.keystore-destkeystoretype JKS


    现在android.keystore文件可以在Google Eclipse插件中用于将您的应用程序导出到签名的APK中

    我真的很高兴看到这篇文章,直到我看到@ddcruver的评论(2010-06-05)和@cistearns的评论(2011-03-01)

    然而,您描述的转换方法实际上存在一个主要的安全问题(如果它按照您预期的方式工作的话),这使得攻击者在能够让您的用户安装他们的东西的情况下更换您的应用程序变得相当简单:

    • 您发布了使用证书A签名的应用程序

    • 攻击者获得apk,并使用证书M对其进行额外签名,然后分发应用程序
    • 然后,攻击者可以释放一个用证书M签名的恶意应用程序来替换您的应用程序,并访问它可能存储的任何数据
    通常,如果攻击者试图替换某些内容,安装将拒绝,除非原始内容被删除,此时数据将被擦除

    另一方面,转换密钥/证书仍然有几个有效的用例:密钥续订、移交给另一个开发人员等


    通过授权从旧密钥转换到新密钥,可以更安全地执行此操作。请参阅。

    好的,我将查看Android Market是否会接受分配给它的旧证书,然后是新证书,然后上传另一个仅使用新证书的更新,看看它是否有效。这就是我的想法,但我对代码签名一般来说是新手,它一次也没有提到更改证书的方法。至少在Android文档中是这样。似乎效果很好,这似乎是在Android Market应用程序上更改证书的方法。只是想更新一下,它工作正常,但所有用户都必须卸载并重新安装这些应用程序才能升级。我认为android市场在未来的某个时候需要解决这个问题。我不会再更改我的证书了,因为这对我的客户来说很烦人。我今天刚刚测试了这个过程-看起来市场门户已经更新,以检查完整的1-1证书匹配,所以这种证书升级方法不再有效。错误消息现在是“必须使用与以前版本相同的证书对apk进行签名。”“攻击者获得apk,并使用证书M对其进行额外签名,然后分发应用。”——根据您引用的注释,该应用似乎被开发人员控制台阻止。是的。就目前而言,这不是一个安全问题。我的意思是,如果可以这样转换密钥,那么这将是一个安全问题。还要注意的是,Google Play(和开发者控制台)不是分发apk文件的唯一方式。在jdk1.7.045中,他们更改了一些参数名称。现在是srcstorestype和deststoretype。