tri*_*oid 6 java keystore java-8 jceks
当我在java.security.KeyStore下调用该函数时:
public final Key getKey(String alias, char[] password)
我收到以下错误:
java.security.UnrecoverableKeyException: Rejected by the jceks.key.serialFilter or jdk.serialFilter property
at com.sun.crypto.provider.KeyProtector.unseal(KeyProtector.java:352)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(JceKeyStore.java:136)
at java.security.KeyStore.getKey(KeyStore.java:1023)
Run Code Online (Sandbox Code Playgroud)
任何Java文档中都不存在此错误,只会间歇性地发生.导致此错误的原因是什么以及如何解决?
更新:现在由@zeal透露,它与http://www.oracle.com/technetwork/java/javase/8u171-relnotes-4308888.html#JDK-8189997有关.因此,如果没有其他配置,只能使用几个Key实现选项.但是在发行说明中我发现了一个声明:
存储未序列化为上述类型的SecretKey的客户必须修改过滤器以使密钥可提取.
这似乎是新的东西,因为它表明密钥的序列化可以被程序覆盖,是否是使其他密钥类型与JCEKS密钥库兼容的唯一方法?
其原因是最新的 java 版本 JDK-8 build 171 中的问题。已从 jks 切换到 pkcs12,这是 jcrypto 中 java 端(最新的 JDK-8 build 171)的开放问题:https://github.com /jcryptool/core/issues/120。
解决方法是将 JRE 8 build 171 版本切换到 JRE 8 build 144/121