2012-12-26 72 views
7

中找到的密鑰將apk簽名爲系統正如標題所述,我嘗試使用platform.x509.pem和platform.pk8簽署我的應用程序。問題是,我使用時,密鑰工具,importkeypairs添加這些像這樣得到錯誤:使用在source/build/target/product/security/

keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform 


而且我也得到一個錯誤嘗試使用APK SignApk.jar這樣直接登錄時:

java -jar SignApk.jar platform.x509.pem platform.pk8 test-app.apk test-app-signed.apk 


使用Keytool-importkeypairs錯誤:

Error decrypting key 
3074042056:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319: 
3074042056:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO 
unable to load private key 
3074091208:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY 
Importing "platform" with unable to load certificate 
3073755336:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE 
keytool error: java.lang.Exception: Source keystore file exists, but is empty: /tmp/keytool-importkeypair.vDOP/p12 


使用的來源:Apk with system privilegesHow to sign Android app with system signature? (SO)How to update the android dev phone 2 from 1.6 to 2.1
您可以看到上述鏈接中描述的方法都不起作用。 在此先感謝。

+0

爲什麼你需要系統權限? – 0909EM

+0

我正在創建一個需要訪問[PowerManager]中的「rebo​​ot」命令的應用程序(http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang。字符串)),以便在啓動時專門運行一系列測試,並確定特定品牌的手機是否可以植根,如果可以,則此手機的擁有者可以使用計算機端實用程序(由我創建)來這樣做。 – cnexus

+0

@ 9090EM顯然這個應用程序不會在Play商店上發佈,但我在XDA上有聲望,所以使用這個應用程序的人會知道他們在做什麼,並且我不會做任何有害他們系統的事情。 – cnexus

回答

12

首先檢查文件的格式(使用cat等),錯誤表明它們不是預期的格式(ASN.1/PEM)。

更重要的是,使用這些鍵很少有意義。這些僅僅是示例鍵,並且任何自尊自定義ROM將使用其自己的私鑰鍵。否則,任何人都可以使用AOSP中的公開密鑰在APK上簽名,並獲得他們想要的任何特權。不用說,非常糟糕的東西。如果您需要開發一個使用系統權限的應用程序,並希望它可以在所有(或大多數)根植電話和自定義ROM上工作,則正確的方法是請求根訪問權限爲su,並執行您需要的任何操作根外殼。當然,如果用戶授予您許可權。

編輯:

要調試導入錯誤,請逐步運行。它可以使用默認的AOSP密鑰。

$ openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem 
$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -password pass:android -name platform 
$ keytool -importkeystore -deststorepass android -destkeystore test.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android 
$ keytool -list -v -keystore test.keystore 

做些什麼:

  1. 的PKCS#8格式的二進制關鍵PEM轉換(openssl pkcs8
  2. 創建一個PKCS#12文件同時包含私有密鑰和證書(openssl pkcs12
  3. 由於Java的keytool可以讀取PKCS#12文件作爲密鑰庫,因此它會將PKCS#12文件導入到e有效地將其轉換爲本機格式(BKS或JKS)(keytool -importkeystore
  4. (獎金)使用keytool列出內容以確保一切正常。 (keytool -list
+0

是的,我意識到我可以用「su」來請求訪問,但重點是運行此應用程序的設備不會擁有root權限。有什麼方法可以獲得製造商簽名密鑰?不幸的是,迄今爲止似乎沒有。 – cnexus

+1

當然,無法直接獲得製造商的密鑰。儘管您的應用程序可以讓您的應用程序包含在ROM中。此外,「根應用程序」的重點在於它們只能在*已經*根的設備上工作。 –

+0

至於你的實際錯誤,關鍵文件是什麼樣的?你檢查了嗎。 –