web-dev-qa-db-ja.com

Androidキーストアが機能しなくなった

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

エラー:

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

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経由:File> Export> Export Android Application。
  • JDK7より前:jarsigner -verbose -keystore KEYSTORE FILE ALIAS。
  • JDK7の場合:jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE FILE ALIAS。

把握または試してみるべきものは何ですか?

  • いくつかの参照/ URLは、「trusted.certs」ファイルを削除するように言っていますか?
  • 「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です。

更新(6/29/14)

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

パスワードを非常にすばやく入力すると、時々機能します。

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

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

キーを適切に復元できない場合は、Githubでソースを開くことがあります。


解決策(6/29/14):

ユーザーErhannisに感謝します!

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

コマンドは毎回私にエラーを出します:

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

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

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

秘密鍵を抽出してPKCS12として保存した後、秘密鍵を抽出し、新しいJava Keystore:

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 file のパスワードを紛失しました)==

署名されたリリースキーストアをEclipseで実行している問題

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

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

50
Jared Burrows

同じ問題が発生した可能性があります。なぜ失敗したのかはわかりませんでした(キーストアのパスワードが6桁より短かったのではないかと思います)が、キーを新しいキーストアにコピーすることができました。そして、それはその後、神秘的に機能しました(新しいパスワードを使用)。ちなみに、キーのパスワードが必要でした。作業中 https://security.stackexchange.com/a/3795 、私は次のことをしました:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. 新しいキーストアパスワードを2回入力しました
  3. ヒット Enter ソースキーストアのパスワードを要求されたとき(空白のままにします)
  4. キーパスワードを入力しました

新しいものが機能することを再確認した後、古いものの上にコピーしました。それがあなたのために働くことを望みます。幸運を。

6
Erhannis

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

別の提案

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

3
Silverstorm

私は同じ問題を抱えていて、このスレッドで提案されているすべてを試しましたが、エイリアスパスワードを保存することはできませんでした。ポイントは、すでにアプリを4回更新したため、パスワードについては絶対に確信を持っていたということです。 "キーストアが改ざんされたか、パスワードが間違っていました"メッセージが表示されました。

ソリューション

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

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

これに基づいてSOリンク: Antは、Android v20)への更新後に署名済みapkの構築に失敗します をお勧めしますパスワードの前後にスペース文字を追加してみてください

2
Gerhat

さらにいくつかのヒートとトライアルを提案します。

これらを適用するのに忍耐があり、

手順:

  1. Eclipseで自動的にビルドのチェックを外し(プロジェクト->自動的にビルド)、プロジェクトをクリーンアップします。
  2. 再度ビルドします(プロジェクト+プロジェクトの右クリック)。
  3. プロジェクトをエクスポートします。
  4. Android Export。(自動調整))を選択します
  5. キーを選択してください。パスワードを入力します。エイリアスがリストに含まれている必要があります(Caps Lockについて確認してください)。時々正しいパスワードを与えますが、大文字のため常に失敗します;)
  6. うまくいくかどうか教えてください。

これがあなたのお役に立てば幸いです。

1

私も最近この問題と戦い、ここにリストされているすべての提案を試しました。最後に、このエラーの原因となっている愚かな間違いを最後に特定しました。皆さんの助けになる場合に備えて、ここで共有したいと思います。

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

何らかの理由で、コンパイル手順は次のような完全な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が問題を引き起こしているので、忘れずにチェックしてください。

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

0
Nik Sanghvi

この問題が発生しました-突然Android Studioはパスワードを忘れてしまい、gradleファイルにあるものを使用しませんでした。同じプロジェクトで同じキーファイルとパスワードを使用しました6年間!

だから私はそれらを手動で入力しましたが、何度も検証に失敗しました。キャッシュの無効化、Android Studioの再起動、キーストアのバックアップの復元など)を試しましたが、何も役に立ちませんでした。

最後に、純粋に必死になって、キーストアのパスワードとキーのパスワードを切り替えようとしました。見よ、それはうまくいった!数年前にGradleビルドファイルに入力したときにパスワードを切り替えていたことが判明しましたが、何らかの理由で私は気づきませんでした。

結論:あなたがそれを正しくしていることを100%確信してはいけません。

0
Magnus W

キーエイリアスが突然機能しなくなりました。 (OK、Android StudioおよびJava)のいくつかの更新後。

私はこのスレッドと他のスレッドからすべてのソリューションを試しました。私の場合、解決策は驚くべきものでした。エイリアスがほとんどないキーストアがあります。キーストアと同じパスワードを持つものを除いて、どれも機能していませんでした。しかし、残念ながら、それは私が必要としたものではありませんでした。これにより、ロジックを使用せずに考えることができました。単一のエイリアスを新しいキーストアにコピーしました

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -srcalias importantalias

次に、エイリアスパスワードをキーストアのパスワードと同じものに変更しました。

keytool -keypasswd -keystore new.keystore -alias importantalias

最後に、apkに署名することができました。それは、開発の1日を無駄にする愚かなバグのように見えます。

0
Malak Pete