web-dev-qa-db-ja.com

Androidキーストアが破損しています

Playストアでアプリケーションを更新しなかった後、キーストアを使用してAPKの1つに署名しようとしましたが、キーストアとエイリアスパスワードが機能しなくなったことがわかりました。この要点を使用してリセットできたキーストアパスワード:_Gist.github.com/zach-klippenstein/4631307_で、現在は正常に機能しています。これは、2つの異なるアプリケーションの2つの異なるキーストアで発生します。

_keytool -list -keystore mykeystore_を実行すると、次の結果になります。

_Keystore type: JKS
Keystore provider: Sun

Your keystore contains 1 entry

myalias, Dec 23, 2014, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 85:8F:69......
_

エイリアスパスワードはキーストアパスワードと同じであると100%確信していますが、機能していないようです。 Android Studioで_jarsigner -keystore mykeystore -storepass mykeystorepassword app-debug.apk myalias_を使用してAPKに署名しようとしましたが、応答は常に_jarsigner: unable to recover key from keystore_です。

エイリアスを_keytool -importkeystore -srckeystore mykeystore -destkeystore newkeystore -srcalias myalias_で新しいキーストアファイルに移動しようとすると、新しいキーストアの新しいパスワードと古いキーストアのパスワードを入力するように求められます(どちらも機能します)。エイリアスパスワードを入力した後、例外が発生します。 :

_Enter destination keystore password:  
Re-enter new password: 
Enter source keystore password:  
Enter key password for <myalias>
keytool error: Java.security.UnrecoverableKeyException: Cannot recover key
_

グーグルを行った後、別のJDKバージョンまたはAndroid Studioバージョンに更新した後、キーストアが機能しなくなった人がいることがわかりました。それが私にも当てはまるのではないかと思います。キーストアが作成されました。 2014年に、私はおそらく当時JDK7を使用していました(現在は8歳です)。また、2つのキーストアが不思議なことに機能を停止しているのではないかと疑っています。

これはどういうわけか修正できますか?

編集:

Janのソリューションを試したところ、次の結果が得られました。

_keytool -importkeystore -srckeystore mykeystore -destkeystore newkeystore -deststoretype pkcs12_でも同じ例外が発生します:_keytool error: Java.security.UnrecoverableKeyException: Cannot recover key_。

このコマンドを実行した後:_keytool -importkeystore -srckeystore newkeystore -srcstoretype pkcs12 -destkeystore finalkeystore -deststoretype jks_次のエラーが発生します:keytool error: Java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

2番目の編集:

また、JDK7を搭載したPCでapkに署名してみましたが、運が悪かったです。

3番目の編集:

KeyStore Explorerを使用してみましたが、キーストアファイルが正常に開き、1つのエントリ(有効期限が切れていません)が表示されます。秘密鍵を開こうとすると、同じ例外が発生します。スタックトレース:

_Java.security.UnrecoverableKeyException: Cannot recover key
at Sun.security.provider.KeyProtector.recover(KeyProtector.Java:328)
at Sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.Java:146)
at Sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.Java:56)
at Sun.security.provider.KeyStoreDelegator.engineGetKey(KeyStoreDelegator.Java:96)
at Sun.security.provider.JavaKeyStore$DualFormatJKS.engineGetKey(JavaKeyStore.Java:70)
at Java.security.KeyStore.getKey(KeyStore.Java:1023)
at net.sf.keystore_Explorer.gui.actions.KeyStoreExplorerAction.unlockEntry(KeyStoreExplorerAction.Java:154)
at net.sf.keystore_Explorer.gui.actions.KeyStoreExplorerAction.getEntryPassword(KeyStoreExplorerAction.Java:123)
at net.sf.keystore_Explorer.gui.actions.KeyPairPrivateKeyDetailsAction.doAction(KeyPairPrivateKeyDetailsAction.Java:69)
at net.sf.keystore_Explorer.gui.actions.KeyStoreExplorerAction.actionPerformed(KeyStoreExplorerAction.Java:93)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.Java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.Java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.Java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.Java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.Java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.Java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.Java:877)
at Java.awt.Component.processMouseEvent(Component.Java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.Java:3324)
at Java.awt.Component.processEvent(Component.Java:6300)
at Java.awt.Container.processEvent(Container.Java:2236)
at Java.awt.Component.dispatchEventImpl(Component.Java:4891)
at Java.awt.Container.dispatchEventImpl(Container.Java:2294)
at Java.awt.Component.dispatchEvent(Component.Java:4713)
at Java.awt.LightweightDispatcher.retargetMouseEvent(Container.Java:4888)
at Java.awt.LightweightDispatcher.processMouseEvent(Container.Java:4525)
at Java.awt.LightweightDispatcher.dispatchEvent(Container.Java:4466)
at Java.awt.Container.dispatchEventImpl(Container.Java:2280)
at Java.awt.Window.dispatchEventImpl(Window.Java:2750)
at Java.awt.Component.dispatchEvent(Component.Java:4713)
at Java.awt.EventQueue.dispatchEventImpl(EventQueue.Java:758)
at Java.awt.EventQueue.access$500(EventQueue.Java:97)
at Java.awt.EventQueue$3.run(EventQueue.Java:709)
at Java.awt.EventQueue$3.run(EventQueue.Java:703)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.Java:76)
at Java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.Java:86)
at Java.awt.EventQueue$4.run(EventQueue.Java:731)
at Java.awt.EventQueue$4.run(EventQueue.Java:729)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.Java:76)
at Java.awt.EventQueue.dispatchEvent(EventQueue.Java:728)
at Java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.Java:201)
at Java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.Java:116)
at Java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.Java:105)
at Java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.Java:101)
at Java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.Java:93)
at Java.awt.EventDispatchThread.run(EventDispatchThread.Java:82)
_
27
Niels Masdorp

試してみてください

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

そして

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

この質問 で提案されているように。

5
Tobi Nary

私はあなたとまったく同じ問題を抱えていて、以下のようなスモークディスペンサーや他の解決策を試してもまったく同じ結果を得ていました:

keytool -importkeystore -srckeystore mykeystore -destkeystore newkeystore -deststoretype pkcs12でも同じ例外が発生します:keytoolエラー:Java.security.UnrecoverableKeyException:キーを回復できません。

次のコマンドを実行した後:keytool -importkeystore -srckeystore newkeystore -srcstoretype pkcs12 -destkeystore finalkeystore -deststoretype jksこのエラーが発生します:keytoolエラー:Java.io.IOException:DerInputStream.getLength():lengthTag = 109、大きすぎます。

ただし、エイリアスに間違ったパスワードを使用していることに気付いた後、それを機能させることができました。したがって、以下のコマンドを試して、正しいパスワードを推測し、同時に覚えやすいパスワードに変更できるかどうかを確認してください。

keytool -keypasswd  -alias mykey -keystore mykeystore
0
FBP