2017-08-07 123 views
2

是否有可能更改java版本的keytool文件 - .keystore?我们用于签署apks的keystore文件是在java 7下创建的,这个文件太旧了,大家都知道。我们所有的应用程序都是在最新的java版本下开发的,但是由于签名过程的原因,我们仍然需要在我们的机器上保留java 7来进行签名。有没有办法如何在最新的Java版本下复制整个密钥库?我已经尝试过如:KeyStore文件“升级”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工具将原始密钥库导入到新工具中,该工具已成功导入证书,但已更改SHA 1个指纹。

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

甚至尝试过Oleg的建议,打开最新的Java下的这个keystore文件仍然不能正常工作Redundant length bytes exception

编辑 由于@ Oleg指出评论,别名可能以某种方式损坏。所以我们不能使用这个最新的Java来签名。所以看起来我的问题没有解决方案。无论如何,将一个密钥库文件的内容复制到另一个是Oleg的解决方案是正确的。

+1

我一直在使用相同的密钥库约17年,如果不是更早可追溯到Java 1.3的,我从来没有遇到兼容性问题。 – EJP

回答

0

Java 8对于由Java 7创建的keystore文件应该没有问题。您可能在java.security文件或某个其他配置问题中具有由keystore.type属性定义的不同默认密钥库类型。见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 
+0

也确保JRE的两个版本都有JCE策略罐子 –

+0

Thanks @Oleg,我之前找到了这个,但不知道这是我正在寻找的。请尝试一下,让它知道它是否会起作用。 – Mony

+0

你需要更多。这样会失去所有的私钥。 – EJP