つい最近、キー ストアで問題が発生しました。この問題についてはすでに多くの質問があることを知っています。私はそれらすべてを読み、猛烈にグーグルで検索しました。
エラー:
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 キー ストアを紛失しました。どうすればよいですか?
ブルートフォース検出を考えて、キーストアのパスワードを忘れました。キーストアが破損しますか?
Android Keystore ファイルのパスワードを紛失しました
署名済みのリリース キーストアを Eclipse で実行する際の問題