2017-03-02 1 views
3

Wir arbeiten an einer Cordova App und haben Schwierigkeiten beim Signieren der Android-Version der App.Signieren Android App wirft IOException: Redundante Länge Bytes gefunden

den Befehl

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

gibt die folgende Ausnahme

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

, die von this line in OpenJDK kommt apparently diese CVE-2016-5546 zu beheben wurde hinzugefügt, obwohl ich weiß nicht genug über Krypto um wirklich zu verstehen es.

Exportieren des Zertifikats mit OpenSSL und Erstellen eines neuen P12 von diesem funktioniert gut, aber ändert die Signatur, was bedeutet, dass der Play Store den Upload ablehnt.

Der Keystore stammt von einem anderen Unternehmen, in das wir ursprünglich die App-Entwicklung ausgelagert hatten.

Alle jarsigner oder Keytool-Befehl führt die gleiche Ausnahme, die ich Sinn erraten macht, da sie alle die gleiche Java verwenden lib

+0

Haben Sie versucht Oracle JDK? – JimmyB

+0

Gibt die gleiche Nachricht mit Oracle 8 und 9 :( –

+0

Es gibt dieses Problem auf der OpenJDK JIRA, die sehr verwandt scheint https://bugs.openjdk.java.net/browse/JDK-8175251 –

Antwort

2

Wir hatten das gleiche Problem. Wir haben festgestellt, dass JDK 1.8.0_112 nicht den Fehler enthält, über den Sie sprechen. So beschlossen wir, das Problem auf diese Weise:

Zuerst wandelten wir temp_keystore.p12 in mycert.keystore indem Sie den folgenden Befehl (Java\jdk1.8.0_112\bin\keytool.exe):

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

Dann verwenden wir den folgenden Befehl ein (Java\jdk1.8.0_112\bin\jarsigner.exe):

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

zu unterzeichnen apk. ("1" am Ende des Befehls ist der Alias)

PS .: Umrüstung von .p12 auf .keystore ist möglicherweise nicht erforderlich.

+0

Ja, Sie haben Recht, es scheint magisch zu arbeiten jetzt sind wir auf 131. Aus dem Commit sieht es so aus, als ob sie eine Flagge setzen, um den neuen Check zu überspringen. –

1

Ich habe Stunden damit verbracht, eine Lösung für dieses Problem zu finden. Habe fünf verschiedene JDKs ausprobiert und nichts hat funktioniert. Ich habe ein altes PKCS12-Zertifikat für eine sehr beliebte Playstore-App, die ich vom vorherigen Entwickler "geerbt" habe, und JDK 8 + 9 wird es nicht verwenden. Olexandrs Lösung hat auch nicht geholfen.

Endlich, fast durch Scherenglück, habe ich eine Lösung gefunden here, in Weijung Wangs Antwort. Es beinhaltet das Exportieren und Reimportieren des Zertifikats mit openssl. Ich wieder importiert dann die P12 Schlüsselspeicher im JKS-Keystore und es funktioniert jetzt mit JDK 8.

Zitat:

Weijun Weijun Wang hat einen Kommentar - 2017-02-28 15:55
Openssl in der Lage, Entfernen der redundanten 0s beim Extrahieren des privaten Schlüssels.Wir können die folgenden zwei Befehle verwenden, um eine betroffene Datei pkcs12 zu normalisieren:

  1. openssl pkcs12 -in pkcs12-Datei -out Schlüssel-cert -nodes -passin passieren: abcxyz

  2. openssl pkcs12 - in Schlüssel-cert -export -out neue pkcs12-Datei -passout passieren: abcxyz

0

ich den gleichen Fehler aufweisen wurden und Olexandr Lösung nicht funktionieren würde, wie mit keytool auf JDK8 (Update 151) würde einen Fehler beim Lesen der CE werfen rtificate, das mit JDK7 generiert wurde. Wie aus Anders Antwort, OpenSSL arbeitete mit (die Befehlszeilen für zukünftige Referenz einfügen):

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 
Verwandte Themen