2017-03-02 12 views
3

我们正在研究Cordova应用程序,并且难以签署应用程序的Android版本。签署android应用程序抛出IOException:发现冗余字节数

使用命令

jarsigner -keystore keystore.p12 -storetype pkcs12 android-release-unsigned.apk 1 

给出了以下异常

java.io.IOException: DerInputStream.getLength(): Redundant length bytes found 

它来自this line在OpenJDK的apparently比例添加到解决CVE-2016-5546虽然我不知道足够的密码要真正了解它。

使用openssl导出证书并从中创建新的p12可以正常工作,但会更改签名,这意味着Play商店拒绝上载。

我们来自另一家公司,我们最初将应用程序开发外包给我们的keystore。

任何的jarsigner或keytool命令抛出我的猜测是有道理的,因为它们都使用相同的Java的lib

+0

您是否尝试过甲骨文的JDK:从安德斯答案 作为,使用OpenSSL与(粘贴以供将来参考命令行)的工作? – JimmyB

+0

给出了与Oracle 8相同的消息和9 :( –

+0

上有OpenJDK的JIRA这个问题这似乎很相关https://bugs.openjdk.java.net/browse/JDK-8175251 –

回答

2

我们有同样的问题,同样的异常。我们发现JDK 1.8.0_112没有您所说的错误。因此,我们解决了这样的问题:

起初我们转换temp_keystore.p12mycert.keystore通过使用下面的命令(Java\jdk1.8.0_112\bin\keytool.exe):

keytool -importkeystore -srckeystore temp_keystore.p12 -destkeystore mycert.keystore -srcstoretype pkcs12 

然后,我们用下面的命令(Java\jdk1.8.0_112\bin\jarsigner.exe)

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore mycert.keystore ReadyForSigning.apk 1 

以签名apk(“1”在命令结束时是别名)

PS .:从.p12转换为.keystore可能没有必要。

+0

是的,你说得对,似乎被神奇地工作,现在我们是在131从提交它看起来像他们放在一个标志跳过新的检查。 –

1

我花了数小时寻找解决这个问题的方法。尝试了五个不同的JDK,没有任何工作。对于一个非常受欢迎的PlayStore应用程序,我有一个旧的PKCS12证书,我已从之前的开发人员“继承”过,并且JDK 8 + 9不会使用它。 Olexandr的解决方案也没有帮助。

最后,几乎受到剪切运气的影响,我设法找到了一个解决方案here,Weijung Wang的反应。它涉及使用openssl导出和重新导入证书。然后我再进口的P12密钥存储在JKS密钥库,现在有JDK工作8

报价:

卫军卫军王加评论 - 2017年2月28日15:55
OpenSSL是能够在提取私钥时删除多余的0。我们可以用以下两个命令正常化受影响的PKCS12文件:

  1. OpenSSL的PKCS12 -in PKCS12文件退房手续密钥和证书-nodes -passin传:abcXYZ

  2. OpenSSL的PKCS12 - 在钥匙和证书-export退房手续新PKCS12文件-passout通:abcXYZ

0

我一直有同样的错误,并奥列克山大的解决方案是行不通的,因为使用密钥工具上JDK8 (更新151)将在读取ce时发生错误rtificate,它是用JDK7生成的。

openssl pkcs12 -in android.p12 -out android_fixed.cert -nodes -passin pass:your_p12_password 
openssl pkcs12 -in android_fixed.cert -export -out android_cert.p12 -passout pass:your_p12_password