是否可以更改密钥工具文件的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的解决方案是正确的。
答案 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