KeyStore文件“升级”java版

时间:2017-08-07 14:49:03

标签: java android apk code-signing keytool

是否可以更改密钥工具文件的java版本 - .keystore?我们用于签署apks的密钥库文件是在java 7下创建的,这个文件太老了,我们都知道。我们所有的应用程序都是在最新的java版本下开发的,但是由于签名过程,我们仍然需要在我们的机器上保留java 7才能进行签名。有没有办法如何在最新的Java版本下复制整个密钥库?我已经尝试过例如:

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v

在java 8下我得到了异常:

  

无法初始化,java.io.IOException:DerInputStream.getLength():   找到冗余长度字节

当我在java 7下运行相同的命令时,它当然有效。

已经尝试过:

Oleg的帖子 - 给出与上面相同的例外

  

无法初始化,java.io.IOException:DerInputStream.getLength():   找到冗余长度字节

使用KeyStore Explorer工具将原始密钥库导入到新密钥库,该工具已成功导入证书,但更改了SHA1指纹。

在Java 7下创建全新的密钥库文件,并使用Java 8的keystool成功列出其详细信息,只是为了使密钥库文件在某种程度上被破坏。

即使尝试过Oleg建议在最新的Java下打开这个密钥库文件仍然无效Redundant length bytes exception

修改 正如@Oleg在评论中指出的那样,别名可能在某种程度上被破坏了。因此我们无法使用最新的Java进行签名。所以看起来我的问题没有解决方案。无论如何,将一个密钥库文件的内容复制到另一个密钥库文件是Oleg的解决方案是正确的。

1 个答案:

答案 0 :(得分:0)

Java 8应该对Java 7创建的keystore文件没有问题。您可能在keystore.type文件中有java.security属性定义的不同默认密钥库类型或其他一些配置问题。请参阅here

而不是找出问题是什么,解决这个问题的简单方法是使用具有显式类型的临时keystore

使用Java 7 keytool

keytool -importkeystore -srckeystore old.keystore -destkeystore temp.keystore.p12 -deststoretype PKCS12

然后使用Java 8:

keytool -importkeystore -srckeystore temp.keystore.p12 -srcstoretype PKCS12 -destkeystore new.keystore