2010-05-21 46 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