我有一個keystore JCEKS使用SUN PROVIDER創建。將提供者的JCEKS的密鑰轉換爲另一個提供者的另一個商店
我必須在沒有SUN PROVIDER的IBM JDK上使用相同的存儲。我如何轉換密鑰庫或使用keytool導出密鑰以便讓IBM JDK訪問密鑰庫中的密鑰?
我有一個keystore JCEKS使用SUN PROVIDER創建。將提供者的JCEKS的密鑰轉換爲另一個提供者的另一個商店
我必須在沒有SUN PROVIDER的IBM JDK上使用相同的存儲。我如何轉換密鑰庫或使用keytool導出密鑰以便讓IBM JDK訪問密鑰庫中的密鑰?
IBM的JDK無法加載使用SUN的JDK創建的密鑰庫。因此,在IBM機器上,如果您想使用密鑰庫,則應該僅使用IBM的JDK創建它。
要使用IBM的JDK創建新的密鑰庫,請參閱this。
您可以將IBMJCE與使用SunJCE創建的JCEKS密鑰庫一起使用。有可能使用keytool密碼既爲密鑰庫提供密碼,也爲securekey本身提供單獨的密碼。當使用keyman IBM密鑰管理器或您自己的類與IBMJCE從JCEKS獲取安全密鑰時,您可能會收到com.sun.crypto.provider.SealedObjectForKeyProtector錯誤。解決方法是將密鑰庫和securekey的密碼設置爲相同的值。
我已經試過了,雖然IBM JDK支持JCEKS,但它不能加載由等效的Sun JDK創建的JCEKS密鑰庫。獲取異常「java.io.IOException:com.sun.crypto.provider.SealedObjectForKeyProtector at com.ibm.crypto.provider.JceKeyStore.engineLoad(Unknown Source)at java.security.KeyStore.load(KeyStore.java:414) 「 - 有趣的是,由IBM JDK keytool創建的KeyStore似乎在Sun/Oracle JDK中加載時工作正常。 – ammianus 2013-04-17 20:40:53
@ammianus:我不覺得很難相信這一點,甚至沒有嘗試它。我經歷了IBM和SUN之間的許多差異,它並不讓我感到驚訝。感謝分享 – Cratylus 2013-04-18 09:26:00
謝謝,但實際上我對我的評論有一個更正。我在測試中發現錯誤,導致太陽側的密鑰存儲文件錯誤。在Sun JRE上加載時,IBM keytool生成的JCEKS密鑰庫也失敗:java.security.UnrecoverableKeyException:com.ibm.crypto.provider.DESedeKey \t at com.sun.crypto.provider.SunJCE_z.a(DashoA13 * ..) – ammianus 2013-04-24 17:27:08