当我调用 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)
此错误在任何 Java 文档中都不存在,只是间歇性发生。此错误的原因是什么以及如何解决?
更新:现在@zeal 透露它与http://www.oracle.com/technetwork/java/javase/8u171-relnotes-4308888.html#JDK-8189997有关。因此,无需额外配置,就可以使用 Key 实现的几个选项。但是在发行说明中我发现了一个声明:
存储不序列化为上述类型的 SecretKey 的客户必须修改过滤器以使密钥可提取。
这似乎是新事物,因为它表明密钥的序列化可以被程序覆盖,这是使其他密钥类型与 JCEKS 密钥库兼容的唯一方法吗?