我有一个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