2010-05-21 31 views
13

如何注册的APK有多个证书,这样我可以做到这一点,当我发布到Android Market:如何使用多个证书签名APK?

1.0版=>与证书签名的
版本签名与2.0 =>证书&乙
3.0 =>与证书乙

Android的市场确实给了我一些希望,但我不知道该用它来做什么,当我用不同标志证书上传给了我这个消息签名:

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

动机:
我已经使用了Android签名工具,用于Android MOTODEV Studio的一部分发表在市场上的应用程序。问题是它本身处理密钥,并且没有办法(记录)来获取它们。我想将其更改为使用密钥存储库和证书,这样即使我不再使用MotoDev Studio,也可以使用该密钥存储库和证书。此外,MotoDev Studio似乎将锁定您的新功能,如共享库。

UPDATE 2011年5月3日:
他们已经实际上非常快,并在更新MOTODEV Studio的提示,但好像我认为,谷歌仍然应该提供一个变通为那些想改变的证书,其应用。更新应用程序给所有人使用相同的证书,随着时间的推移创建新的应用程序,并可能创建一个新的应用程序,以便您可以将应用程序的支持和分发交给其他人。

回答

12

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

例如,您可以从sign an APK使用命令行jarsigner像这样:
jarsigner -keystore original-keystore my-app-unsigned.apk key-alias别名

然后,只需与第二键重复此:
jarsigner -keystore new-signing-keystore my-app-unsigned.apk key-alias

不要忘了运行zipalign算账:
zipalign -v 4 my-app-unsigned.apk my-app.apk


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

+0

好的我会看看Android电子市场是否会接受它分配的旧证书,然后新的,然后上传另一个更新只是新的,看看它是否工作。这就是我的想法,但我对通常的代码签名是新手,并没有提到更改证书的方法。 – ddcruver 2010-05-23 17:51:20

+0

至少在Android文档中。 – ddcruver 2010-05-23 18:06:46

+2

似乎工作得很好,这似乎是在Android Market应用程序上更改证书的方式。 – ddcruver 2010-05-27 03:16:06

2

我今天有这个问题,这里是我做过什么:

  1. 备份旧motodev.keystore文件
  2. 使用最新的MOTODEV工作室(2.0.1),以改变我的MOTODEV。keystore密码(在motodev视图中将其更改为您可以导入密钥库的地方)
  3. 使用与java捆绑在一起的keytool.exe程序,将motodev密钥库文件(类型为JCEKS)转换为常规android密钥库文件(类型为JKS)

keytool -importkeystore -srckeystore motodev.keystore -srckeystoretype JCEKS -destkeystore android.keystore -destkeystoretype JKS

现在android.keystore文件可以在谷歌Eclipse插件来让您的应用程序导出到一个签名APK

+0

在jdk1.7.0_45中,他们更改了一些参数名称。现在srcstorestype和deststoretype。 – 2014-05-31 02:53:39

3

我真的很高兴看到这一职务,直到我看到了@ ddcruver的评论(2010-06-05)和@cistearns的评论(2011-03-01)。

但是,实际上您所描述的过渡方法存在一个主要的安全问题(如果它的工作方式符合您的期望),如果攻击者能够让您的用户安装,则更换您的应用程序非常简单他们的东西:

  • 你发布你的应用程序与证书A.
  • 攻击者获得APK,另外与证书中号签名,然后分配应用程序签名。
  • 然后,攻击者可以释放一个用证书M签名的恶意应用程序,以替换您的应用程序并访问它可能存储的任何数据。

通常情况下,如果攻击者试图替换某些东西,安装程序会拒绝,除非原始内容被删除 - 此时数据将被擦除。

在另一方面,仍有一些有效的使用情况进行转变的关键/证书:密钥更新,移交给另一个开发商等

这可以通过授权过渡到更安全地完成来自旧密钥的新密钥。请参阅issue in the Android project

+0

“攻击者获取apk,另外使用证书M签名,并分发应用程序。” - 根据您引用的评论,这似乎被开发者控制台阻止。 – CommonsWare 2012-05-12 23:47:59

+0

是的。就目前来看,这不是一个安全问题。我在说,如果它/是/可能以这种方式过渡密钥,那么它/将会是一个安全问题。 – 2012-05-13 00:43:20

+0

还请注意,Google Play(和开发者控制台)不是分发apk文件的唯一方式。 – 2012-05-13 00:56:24