使用source / build / target / product / security /中的密钥将apk签名为系统

时间:2012-12-26 02:31:21

标签: java android apk keystore android-keystore

正如标题所述,我正在尝试使用platform.x509.pem和platform.pk8签署我的应用程序。问题是我在使用keytool-importkeypairs添加这些时会出错:

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


当我尝试使用SignApk.jar直接签署APK时,我也会收到错误:

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
正如您所看到的,上述链接中描述的方法现在都不起作用。 提前谢谢。

1 个答案:

答案 0 :(得分:12)

首先检查文件的格式(使用cat等),错误表明它们不是预期的格式(ASN.1 / PEM)。

更重要的是,使用这些键很少有任何意义。这些只是示例键,任何自尊的自定义ROM都将使用自己的私有键。否则,任何人都可以使用AOSP中的 public 键来签署他们的APK,并获得他们想要的任何权限。不用说,这是非常糟糕的事情。如果您需要开发一个使用系统权限并希望它适用于所有(或大多数)root电话和自定义ROM的应用程序,那么正确的方法是使用su请求root访问权限并执行您需要的任何内容在root shell中做。当然,如果用户授予您许可。

编辑:

要调试导入错误,请逐步运行此步骤。它可以使用默认的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. 创建包含私钥和证书(openssl pkcs12
  3. 的PKCS#12文件
  4. 由于Java的keytool可以将PKCS#12文件作为密钥库读取,因此它会导入您的PKCS#12文件以有效地将其转换为本机格式(BKS或JKS)(keytool -importkeystore
  5. (奖金)使用keytool列出内容,以确保一切正常。 (keytool -list