当前位置: 首页 > 面试题库 >

Android密钥库停止工作

广昊昊
2023-03-14
问题内容

最近,我在密钥库方面遇到了问题。我知道已经有很多关于这个问题的问题。我已经阅读了所有内容,然后疯狂地搜索了Google。

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

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。

还有什么可以解决或尝试的?

  • 一些引用/ 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 -jar AndroidKeystoreBrute_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)中提取私钥,那么我会更深入地研究并最终使用命令的变体。我跟踪了您在此处和此处发布的链接:

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

提取私钥并存储为PKCS12之后,我认为应提取我的私钥并将其放回全新的Java密钥库中:

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

问题答案:

我可能有同样的问题。我从来没有弄清楚为什么它会失败(尽管我想知道是否是因为密钥库密码短于6位数字),但是我能够将密钥复制到新的密钥库中,然后我将其重命名以替换旧的密钥库,然后神秘地工作了(使用新密码)。顺便说一句,需要密钥密码。工作https://security.stackexchange.com/a/3795,我做了以下工作:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. 两次输入新的密钥库密码
  3. Enter要求我提供源密钥库密码时,请点击(保留空白)
  4. 输入密钥密码

在仔细检查了新版本后,我将其复制到旧版本上。希望对你有帮助; 祝好运。



 类似资料:
  • 我试图为某些设备生成密钥时出错。我能够在运行4.4.2的三星Galaxy Note上重现错误。 我创建了一个小应用程序,只能通过从Android开发者页面“生成新私钥”下的https://developer.android.com/training/articles/keystore.html逐行复制代码来生成密钥 错误似乎发生在kpg.generateKeyPair(),在Android Key

  • 我最近更新了android studio和它的插件,一切正常。但突然发生了这种事,我知道该怎么解决了。应用程序运行了,但出现了一些意想不到的行为。尝试同步gradle,卸载和重新安装更新,但似乎没有任何工作。

  • 问题内容: 我希望有一种方法可以以编程方式访问Android设备上的中央信任密钥库。我知道存在,至少用于验证SSL连接等。它还带有一个方便的工具,用于添加证书,浏览等。(位于设置->位置和安全性->管理受信任的证书下) 我希望能够以编程方式从中检索公钥,以对文件等进行加密。 如果有可用的文档,似乎其他应用程序开发人员正在他们的应用程序中管理自己的密钥库,这似乎是多余的。 有任何想法吗? 问题答案:

  • 我有一个密钥库,名为keystore。jks和意外添加了两个键。我必须使用键2制作一个签名的apk。因为我已经使用key2上传了一个apk,我想从keystore中删除Key1。jks。 签名的apk是使用Key1生成的,但我需要使用key2生成。 请帮帮我。提前谢谢。

  • Android Studio是否签署调试版本?如果是的话,它用来做这件事的密钥库在哪里?

  • 我使用GF3.1.2.2,现在我需要为我的网络应用配置一个让加密SSL证书。在我用新的包括让加密证书的keystore.jks更改默认后,我的网络应用工作正常,但是管理控制台没有。 服务器。日志文件出现此错误是因为它需要默认的密钥存储。jks文件: [#| | 2016-05-17T11:31:15.344-0400 |严重| glassfish 3.1.2 | org.glassfish.adm