Oracle Java 8 JRE 172打开JCEKS密钥库报Invalid secret key format异常
JCEKS密钥库加载异常及后续类加载问题排查
最近我在Windows系统上使用Oracle Java 8 JRE 172版本打开JCEKS类型密钥库时,遇到了以下异常——之前用旧版JRE是可以正常运行的:
INFO: ObjectInputFilter REJECTED: null, array length: -1, nRefs: 1, depth: 1, bytes: 70, ex: n/a [...call stacks omitted to protect the innocent...] Caused by: java.io.IOException: Invalid secret key format at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:856) at java.security.KeyStore.load(Unknown Source) [...]
这个问题和JDK-8202506的情况类似,但我用的是Java 8,而且初始INFO消息里出现了null,想问问这是不是同一个问题?另外,JDK-8202506是不是没有在公开的JRE版本里修复?
更新1
我找到了一个类似的问题ATLAS-2642,但同样没有找到解决方案。
更新2
升级之后,Equinox找不到com.sun.crypto.provider.SealedObjectForKeyProtector类,尽管这个类明明在新JDK的JRE里存在,报错信息如下:
BundleClassLoader[foo.bar.baz.crypto].loadClass(com.sun.crypto.provider.SealedObjectForKeyProtector) failed. java.lang.ClassNotFoundException: com.sun.crypto.provider.SealedObjectForKeyProtector at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:481) at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:397) at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:385) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:87) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:686) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1866) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1749) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2040) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431) at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:850) at java.security.KeyStore.load(KeyStore.java:1445)
更新3
我发现sunjce_provider.jar里的SealedObjectForKeyProtector.class和其他类不一样,用JD-GUI反编译的时候会出现内部错误,其他类都没有这个问题:
内容的提问来源于stack exchange,提问作者wilx
相关产品推荐
相关产品推荐

