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

41

我想将一个标准的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

你有任何解决这个问题的想法吗?


3
看起来你的PCKS#12密钥库已经损坏了。你能用openssl pkcs12 ...验证一下吗? - user207421
10个回答

50

有时候出现这个错误是由于使用了不正确的p12密钥密码。


1
pkcs12密钥库类型不区分keypass和storepass。因此在我的情况下,当检索密钥时只需使用storepass(而不是keypass)。 - Lonzak
我使用了错误的密码,因为WebSphere使用的默认密码与大多数Java信任存储不同。 - Ryan D
这就是对我来说的事情。天啊,花了我好一会儿才让它工作起来。 - amorimluc

15

这个 pkcs12 密钥库的确已经损坏了。


8

我以前从未尝试过这个,但是我在这里的谷歌上找到了说明。

此线程提出了类似的问题。

编辑(根据评论)

这是链接参考的全部内容:

PFX / P12 到 JKS(Java KeyStore)

问题:如何将证书从 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”,生成的demoidentity.p12文件在尝试使用keytool列出详细信息时会给我同样的错误,尽管上述命令接受了密码并且似乎正确地生成了文件!
对于你的问题,也许在生成keystore.p12时做了类似的事情。

我认为你有所发现。可能keytool假定原始密钥是其他内容。 - not2qubit

1
我的问题有点特殊。当我在本地开发环境进行测试时,似乎一切正常。然而,当我部署到我们的生产环境时,它出现了根错误javax.crypto.BadPaddingException: 经过一些调试,发现问题出在我使用的docker镜像中的jdk版本上。似乎有些jdk(例如一些1.8版本的包)不兼容。通过一些测试,我找到了一个可行的jdk版本(11.0.21)。如果你已经尝试了所有的选项,但仍然没有解决问题,那么可以尝试这个选项,并检查是否是jdk的问题。

0

从我的角度来看,当您输入密码时,我忘记检查语言 :)在此输入图像描述


0

只需在构建已签名 APK 向导表单上输入正确的密码即可。 (我在 Android Studio 4.2 canary 15++ 上测试通过)

正如我所发现的那样,当你在向导中更改应用程序时,尽管密码保持不变,但某种方式它并没有正确地签名,因此您需要清除密码并重新输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接