keytool 错误: java.io.IOException: Invalid keystore format

Posted 冷冷清清里风风火火是我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keytool 错误: java.io.IOException: Invalid keystore format相关的知识,希望对你有一定的参考价值。

密钥存储库格式无效

1.

找到debug.keystore并删除  

路径 User\\用户名\\android\\debug.keystore  

我的目录:C:\\Users\\growu\\.android\\debug.keystore

删除后重新运行当前项目,会自动的在生成一个debug.keystore文件。

2.

File ---> Project Structure---->SDK Location ---> Gradle Srttings 

进入当前项目jdk根目录bin cmd (我这里用的是AndroidStudio自带的jre)要进入bin根路径

D:\\Software\\Java\\android\\AndroidStudio\\jre\\bin

然后 执行keytool -list -v -keystore debug.keystore命令进行检查是否有错 

指定debug.keystore全路径,一般在系统盘,用户名/.android目录下:

keytool -list -v -keystore C:\\Users\\growu\\.android\\debug.keystore  切换成你自己的。

android debug.keystore 的默认密码

默认debug.keystore的信息如下:
Keystore name: “debug.keystore”
Keystore password: “android”
Key alias: “androiddebugkey”
Key password: “android”
CN: “CN=Android Debug,O=Android,C=US”

如果报错:keytool 错误: java.io.IOException: Invalid keystore format

 那就是当前项目运行debug.keystore(可以去系统用户/.android目录删除,项目运行新创建)生成keystore和访问keystore的JDK版本不一致。(通俗来讲就是 jks是用和当前jdk的不同版本生成的。比如1.8 和 11 )就会报错。(项目需要有时候本地会配置多个版本的jdk 此时多注意)。

书到用时方恨少,纸上得来终觉浅。

是啥导致 keytool 错误“无法解密安全内容条目”?

【中文标题】是啥导致 keytool 错误“无法解密安全内容条目”?【英文标题】:What causes keytool error "Failed to decrypt safe contents entry"?是什么导致 keytool 错误“无法解密安全内容条目”? 【发布时间】:2012-05-07 11:42:57 【问题描述】:

我正在尝试使用以下命令将标准 PKCS #12 (.p12) 密钥库转换为 Java JKS 密钥库:

keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore keystore.jks

它失败了:

keytool error: java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded

你知道如何解决这个问题吗?

【问题讨论】:

您的 PCKS#12 密钥库似乎已损坏。你能用openssl pkcs12 ...验证吗? 【参考方案1】:

有时此错误是 p12 密钥使用错误密码的症状。

【讨论】:

pkcs12 密钥库类型不区分 keypass 和 storepass。所以在我的情况下,我只需要在检索密钥时使用 storepass(而不是 keypass)...... 我使用了错误的密码,因为 WebSphere 使用的默认密码与大多数 Java 信任存储不同。 对我来说就是这样。耶稣,我花了一段时间才让这个工作。【参考方案2】:

pkcs12 密钥库确实已损坏。

【讨论】:

【参考方案3】:

我以前从未尝试过这样做,但我确实在 google here 上找到了说明。

这个thread 提出了类似的问题。

编辑(基于评论)

以下是链接参考的完整内容:

PFX/P12 到 JKS(Java 密钥库)

问题:如何将证书从 IIS/PFX(.p12 文件)移动到 JKS(Java KeyStore)?

答案: keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

注意:要查找 srcalias,请列出 PFX/P12 文件的内容:

keytool -v -list -storetype pkcs12 -keystore PFX_P12_FILE > FILENAME.TXT 因为这会将命令的输出写入名为 FILENAME.TXT 的文件。

【讨论】:

【参考方案4】:

我遇到了同样的问题,我手动输入了密码,问题得到了解决

【讨论】:

【参考方案5】:

我今天遇到了同样的问题(BadPaddingException)。似乎 keytool 的密码中的某些字符有问题。我通过在密码周围添加双引号解决了这个问题。

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass "PFX_P12_FILE" -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass "PASSWORD" -destalias ALIAS_NAME

【讨论】:

【参考方案6】:

当我尝试从 JKS 将证书导出为 pfx 时遇到了类似的问题。当我在 keytool 命令中排除 deststorepass 属性并在运行时提供目标存储密码时,它起作用了。

keytool -importkeystore -srckeystore Keystore.jks -destkeystore dv163.pfx -srcstoretype JKS -deststoretype PKCS12 -srcalias alias1-destalias alias1

输入目标密钥库密码:

重新输入新密码:

输入源密钥库密码:

【讨论】:

【参考方案7】:

我执行此命令(与您的命令相反)将私钥从 JKS 导出到 PKCS12:

keytool -importkeystore -srckeystore DemoIdentity.jks -srcstoretype JKS -destkeystore demoidentity.p12 -deststoretype PKCS12

如果我省略了看似多余的“-srcstoretype JKS”,当我尝试在 keytool 中列出详细信息时,生成的 demoidentity.p12 文件给了我同样的错误,即使上面的命令接受了密码并生成了一个看似正确的文件!

对于您的问题,也许您在生成 keystore.p12 时做了类似的事情。

【讨论】:

我认为您正在做某事。可能 keytool 假设原始密钥是别的东西。【参考方案8】:

在我这边我忘记在你输入密码时检查语言:)

【讨论】:

【参考方案9】:

只需在构建签名的 APK 向导表单上输入正确的密码。 (它在 android studio 4.2 canary 15++ 上与我一起工作)

据我了解,当您在上述向导上更改应用程序时,尽管密码仍然存在,但不知何故无法正确签名,因此您需要清除密码并再次输入。

【讨论】:

以上是关于keytool 错误: java.io.IOException: Invalid keystore format的主要内容,如果未能解决你的问题,请参考以下文章

Lucene三个高亮显示模块的简单示例-Highlighter

构建 Spring Boot 应用程序的 Docker 镜像文件

导入证书后出现 Java Keytool 错误,“keytool 错误:java.io.FileNotFoundException & Access Denied”

Keytool 命令中的错误

是啥导致 keytool 错误“无法解密安全内容条目”?

错误:'keytool' 不是内部或外部命令、可运行程序或批处理文件