2017-03-02 18 views
3

GoogleはCordovaアプリを開発中で、Android版Androidアプリの署名が難しいです。コマンドアンドロイドアプリに署名するとIOExceptionが発生する:冗長な長さのバイトが見つかりました

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

を使用

OpenJDKのapparentlythis lineから、これは私が本当に理解するには、cryptoについて十分に知っていないものの、CVE-2016-5546を修正するために添加してくる次の例外

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

を与えますそれ。

証明書をopensslでエクスポートしてから新しいp12を作成すると、正常に動作しますが署名が変更されます。これは、プレイストアがアップロードを拒否することを意味します。

私たちが持っているキーストアは、もともとは私たちがアプリケーション開発を委託していた別の会社から来ました。

どれjarsignerのかのkeytoolコマンドは、私は彼らのすべての我々は同じ問題を抱えていた

+0

は、OracleのJDKを試してみました:OpenSSLを使用してアンダースの答えから としては、(将来の参照のためのコマンドラインを貼り付け)で働いていましたか? – JimmyB

+0

Oracle 8および9で同じメッセージが表示されます。( –

+0

OpenJDK JIRAには非常に関連しているような問題があります。https://bugs.openjdk.java.net/browse/JDK-8175251 –

答えて

2

libに同じJavaを使用するので、理にかなっていると思い、同じ例外がスローされます。 JDK 1.8.0_112には、あなたが話しているバグがないことがわかりました。

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

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

はその後、我々は、以下のコマンド(Java\jdk1.8.0_112\bin\jarsigner.exe)を使用:最初の私たちは、次のコマンド(Java\jdk1.8.0_112\bin\keytool.exe)を使用してmycert.keystoretemp_keystore.p12を変換で

:だから我々はこの方法で問題を解決しました

にはapkと表示されます(コマンドの最後に "1"がエイリアスです)

PS .: .p12から.keystoreに変換する必要はありません。

+0

そうですね魔法のように動作するようになりました。私たちは131にいます。コミットから、新しいチェックをスキップするフラグを入れたように見えます。 –

1

私はこの問題の解決策を見つけるのに数時間を費やしました。 5つの異なるJDKを試してみましたが、何も機能しませんでした。私は以前の開発者から継承した非常に人気のあるプレイストアアプリケーション用の古いPKCS12証明書を持っており、JDK 8 + 9はそれを使用しません。オレクサンドルの解決策も役に立たなかった。

最後に、せん断運でほぼ私は、Weijung Wangの回答で解決策hereを見つけることができました。 opensslを使用して証明書のエクスポートと再インポートを行います。私は、JKSキーストアにP12キーストアを再インポートし、それが今でJDK 8

引用で動作します:

weijun Weijun王は、コメントを追加しました - 2017年2月28日午後03時55分
OpenSSLができています秘密鍵を抽出する際に冗長0を除去する。キーと証明書-nodes -passin渡す-out

  1. のopensslのpkcs12 -in PKCS12ファイル::私たちは、影響を受けたpkcs12ファイルを正規化するために、次の2つのコマンドを使用することができますABCXYZ

  2. のopenssl PKCS12 - キーと証明書-export -out新PKCS12ファイルに渡し-passout:ABCXYZ

0

私は同じエラーを持ってきた、とオレクサンドルのソリューションが動作しないだろうが、JDK8にkeytoolを使用したとして、 (更新151)は、ceを読んでいる間にエラーを投げますJDK7で生成されたrtificate。

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 
関連する問題