什么原因导致 keytool 错误“无法解密安全内容条目”?

问题描述 投票:0回答:10

我正在尝试使用以下命令将标准 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

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

java openssl keytool pkcs#12 jks
10个回答
49
投票

有时此错误是由于 p12 密钥使用了不正确的密码。


15
投票

pkcs12 密钥库确实已损坏。


8
投票

我以前从未尝试过这样做,但我确实在谷歌上找到了说明这里

这个线程提出了类似的问题。

编辑(基于评论)

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

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 的文件。


7
投票

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


4
投票

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

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

输入目标密钥库密码:

重新输入新密码:

输入源密钥库密码:


3
投票

我今天遇到了同样的问题(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


2
投票

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

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

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

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


0
投票

从我这边来看,当您输入密码时,我忘记检查语言:)


0
投票

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

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


0
投票

我的问题有些独特。当我在我的开发环境中进行本地测试时,它似乎工作正常。然而,当我部署到我们的实时环境时,它给出了根错误

javax.crypto.BadPaddingException:

经过一些调试,结果发现是由于我在 docker 映像中使用的 jdk。在我看来,某些 jdks(例如,某些 1.8 软件包)不兼容。通过一些测试,我发现了一个可以使用它的jdk(11.0.21)。如果您尝试了所有选项但没有任何效果,请尝试此选项并检查它是否是 jdk。

© www.soinside.com 2019 - 2024. All rights reserved.