54

つい最近、キー ストアで問題が発生しました。この問題についてはすでに多くの質問があることを知っています。私はそれらすべてを読み、猛烈にグーグルで検索しました。

エラー:

keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
java.io.IOException: Keystore was tampered with, or password was incorrect
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772)
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
    at java.security.KeyStore.load(KeyStore.java:1214)
    at sun.security.tools.KeyTool.doCommands(KeyTool.java:885)
    at sun.security.tools.KeyTool.run(KeyTool.java:340)
    at sun.security.tools.KeyTool.main(KeyTool.java:333)
Caused by: java.security.UnrecoverableKeyException: Password verification failed
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770)
    ... 5 more

私が使用しているソフトウェア:

ジャワ

java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

エクリプス

Version: 3.8.0
Build id: I20120502-2000

最新の ADT プラグイン

最新の Android SDK

これが私が知っていることです:

  • 私はパスワードを紛失しておらず、変更されたこともありません。
  • パスワードを取得できません (パスは知っています)。
  • まったく新しいアプリケーションをリリースせずに、別のキーで既存のアプリケーションに署名することはできません (したがって、更新を公開することはできません)。

これが私がやったことです:

  • Eclipse を何度もアンインストールして再インストールしました。
  • Android ADT プラグインをアンインストールして再インストールしました。
  • 最新の Android SDK を何度も削除して再ダウンロードしました。
  • JDK7をアンインストールして再インストールしました。
  • キーストアのバックアップを使用してみました。
  • 「md5sum KEYSTORE」を使用して MD5 チェックサムをチェックし、バックアップと比較しました (同じ MD5 出力 - 改ざんされていません)。
  • キー ストアの総当りを試みました (知っているパスワードを取得しました)。
  • テストキーを作成し(現在のセットアップで)、パスワードをテストしたところ、うまく機能しているようです(何かが変更されました)。
  • Android .apk を手動でエクスポートしてから、署名しようとしました (Eclipse の外部)。

署名されたアプリケーションをエクスポートする方法は次のとおりです。

  • Eclipse 経由: [ファイル] > [エクスポート] > [Android アプリケーションのエクスポート] を使用したエクスポート。
  • JDK7 より前: jarsigner -verbose -keystore KEYSTORE FILE ALIAS。
  • JDK7 の場合: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE FILE ALIAS。

理解したり試したりするために何が残っていますか?

  • 「trusted.certs」ファイルを削除するように指示されている参照/URL がありますか?
  • 「debug.keystore」を削除してみてください。
  • Eclipse や Android 開発ツールを更新すると、キーストアに影響がありますか?
  • Java を jdk6 から jdk7 に更新すると問題が発生しますか?
  • とにかく、これは jarsigner の動作を台無しにしたり、変更したりする可能性がありますか?

ユーザーの提案:

  • JDK6 を使用してみましたが、最近アプリケーションをエクスポートできました。
  • local.properties で key.store.password または key.alias.password を確認しました
  • Eclipse で自動的にビルドのチェックを外し、プロジェクトをクリーンアップする
  • ワークスペースの .metadata フォルダーを削除し、すべての一時フォルダーをクリアしてみてください。

概要

  • キーストアは変更されていません。
  • 私はキーストアへのパスワードを持っています。
  • 最近、以下を使用してアプリケーションを正常にエクスポートしました。
    • Eclipse 3.8 (および Eclipse 4.0+)、
    • 最新の Java 7、
    • 最新の ADT プラグイン。
  • 最後に成功したエクスポートとビルドは、数週間前に Eclipse 3.8、最新の Android ツール、および同じパスワードで Java 7 を使用したものでした。

更新 (2014 年 6 月 29 日)

  • keytool -list -keystore KEYSTOREを使用して、4つのキーのうち3つが機能することを正常に証明し、示しました。
  • 最後のキーをブルートフォースし、キーストアからパスワードを取得しました (既に知っているパス) が、署名のために入力するとパスワードが機能しません。私が使用したのは、java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLISTです。
  • 奇妙なことに、Eclipse にパスワードをすばやく入力すると、エイリアスが表示され、アプリケーションを正常にエクスポートできる場合があります。(私はこれがクレイジーであることを知っています)。
  • Javaのバージョンを更新しました。

パスワードをすばやく入力すると、うまくいくことがあります。

Eclipse を開いて最初にパスワードを入力すると、キーストアを使用できるようになります。

明らかに、他のすべてが失敗した場合は、新しいキー ストアを作成する必要があります。私は本当にこれを解決したいと思っています。新しいキーで再発行する以外に、今何をすべきかわかりません。

キーが適切に復元できない場合は、Github でオープン ソース化する可能性があります。


解決策 (2014 年 6 月 29 日):

ユーザーErhannisに特別な感謝を!

これが私がしたことです:

コマンドは毎回エラーになります:

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v

Java キーストア (.jks) から秘密鍵を抽出できるとのことでしたので、さらに掘り下げて、コマンドのバリエーションを使用することになりました。ここここに投稿したリンクをたどりました:

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12

秘密鍵を抽出して PKCS12 として保存した後、秘密鍵を抽出して新しい Java キーストアに戻したと思います。

keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks

参考文献:

http://developer.android.com/tools/publishing/app-signing.html#signapp

http://code.google.com/p/android-keystore-password-recover/

私が読んだ StackOverflow URL のリスト:

Androidで失われたKeyStoreパスワードを処理するには?

無効なキーストアの問題?

Android: Android キー ストアを紛失しました。どうすればよいですか?

.keystore ファイルを紛失しましたか?

ブルートフォース検出を考えて、キーストアのパスワードを忘れました。キーストアが破損しますか?

Android Keystore ファイルのパスワードを紛失しました

署名済みのリリース キーストアを Eclipse で実行する際の問題

Android - キーストアのパスワードを忘れました。キーストア ファイルを復号化できますか?

Android リリースのキーストアの問題: 「キーストアが改ざんされたか、パスワードが正しくありませんでした」

4

8 に答える 8

5

同じ問題があり、このスレッドで提案されていることをすべて試しましたが、エイリアス パスワードを保存できませんでした。要点は、アプリをすでに 4 回更新していたので、パスワードについては完全に確信していたということです。「キーストアが改ざんされたか、パスワードが正しくありません」というメッセージが表示されました。

ソリューション

Eclipse を使用したキーストアの作成時に、パスワードの前にスペース文字が追加されたようです!

この厄介なバグは、新しいバージョンで修正されたようで、正しいと思っていたパスワードでアプリに署名できなくなりました。

この SO リンクに基づいて: Android v20 に更新した後、Ant は署名付き apk を構築できません。 password の前後にスペース文字を追加することをお勧めします。

于 2014-09-04T09:40:28.240 に答える
3

ワークスペースの.metadataフォルダーを削除し、すべての一時フォルダーをクリアしてみてください。キーストア ファイルが破損しておらず、Eclipse、ADT、Android SDK、および Java SDK を正しく再インストールしようとした場合、.metadata キャッシュ ファイルや一時的な破損を除いて、この奇妙な問題の原因として考えられるものは他にありません。

別の提案

キーストア、キー、証明書、証明書要求、証明書失効リストなどを管理および検査するためのユーティリティであるPortecleを使用してみてください。

于 2012-12-29T22:29:53.873 に答える
0

local.properties ファイルに key.store.password や key.alias.password などの値を保存していますか? それらのどちらかが間違っていますか?

JDK6 で作成され、JDK7 で検証されたキーで発生するバグがあるかどうかに興味があります-テスト用に作成した新しいキーが機能する理由を説明しますが、古いキーは機能しません。JDK6 にダウングレードしてみて、それが修正されるかどうかを確認してください。他の人は、JDK7 で jarsigner の問題を抱えていましたが、6 にダウングレードしたときに解決しました。それが機能する場合は、バグ レポートを提出し、パッチを要求して、Java 7 に安全にアップグレードできるようにしてください :)

于 2012-12-10T19:59:02.613 に答える
0

私も最近この問題と戦い、ここや他の場所にリストされているすべての提案を試しました. 最後に、このエラーの原因となっているばかげた間違いを特定しました。

これは、私のようにマシンに複数の Java バージョンがあり、最初にキーストアを作成してから APK に署名しようとしている時点までの間に JRE / JDK をアップグレードした場合に当てはまる可能性が高くなります。

何らかの理由で、コンパイル手順は次のように完全な Java パスを参照していました。

C:\Progra~1\Java\jdk1.6.0_45\bin\jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve

上記の提案の 1 つは、パスワードの問題ではなく、バージョンの非互換性が問題の原因である可能性があると考えさせられました。だから私は以下のコマンドを実行しました:

keytool -list -keystore cre80ve.keystore

私が正しいと知っていたパスワードを使用すると、見よ、それが正しいパスワードであることが確認されました。

次に、(古い) Java バージョンへのパスに明示的な参照を削除しました。これにより、Java の最新バージョン (私の場合は jdk1.8.0_31) が自動的に選択されます。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve

そして、すべてがうまくいき始めました!

結論: パスワードの問題ではない可能性がありますが、問題の原因となっている Java または Android SDK のバージョンが異なるため、忘れずに確認してください。

そして、それが機能し始めたら、キーストアとパスワードを安全な場所にバックアップすることを忘れないでください:-)

于 2015-08-07T18:13:01.790 に答える