2017-03-02 31 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