8

正如标题所述,我正在尝试使用 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如何使用系统签名对 Android 应用程序进行签名?(SO)以及如何将 android dev phone 2 从 1.6 更新到 2.1
如您所见,上面链接中描述的方法现在都不起作用。提前致谢。

4

1 回答 1

12

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

更重要的是,使用这些键几乎没有任何意义。这些只是示例密钥,任何自尊的自定义 ROM 都将使用自己的私钥否则,几乎任何人都可以使用 AOSP 中的公钥签署他们的 APK,并获得他们想要的任何特权。不用说,这是一件非常糟糕的事情。如果您需要开发一个使用系统权限的应用程序并希望它在所有(或大多数)root 手机和自定义 ROM 上运行,那么正确的方法是请求 root 访问权限su并执行您需要在 root 中执行的任何操作壳。当然,如果用户授予您权限。

编辑:

要调试导入错误,请逐步运行此操作。它确实适用于默认的 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. 由于 Javakeytool可以将 PKCS#12 文件作为密钥库读取,因此它会导入您的 PKCS#12 文件以有效地将其转换为本机格式(BKS 或 JKS)(keytool -importkeystore
  4. (奖励)用于keytool列出内容以确保一切正常。( keytool -list)
于 2012-12-26T04:04:38.477 回答