2017-08-07 127 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