java - "java.security.UnrecoverableKeyException: Rejected by the jceks.key.serialFilter or jdk.serialFilter property"的原因是什么?

标签 java java-8 keystore 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)

这个错误在任何Java文档中都不存在,只是偶尔出现。此错误的原因是什么以及如何解决?

更新:现在@zeal 透露它与http://www.oracle.com/technetwork/java/javase/8u171-relnotes-4308888.html#JDK-8189997 有关.因此,无需额外配置,仅可使用 Key 实现的几个选项。然而在发行说明中我发现了一个声明:

Customers storing a SecretKey that does not serialize to the above types must modify the filter to make the key extractable.

这似乎是新东西,因为它表明 key 的序列化可以被程序覆盖,这是使其他 key 类型与 JCEKS keystore 兼容的唯一方法吗?

最佳答案

这是由于最新 Java 版本 JDK-8 build 171 中的问题引起的。 已经从 jks 切换到 pkcs12,这是 jcrypto 中 java 端(最新的 JDK-8 build 171)的未解决问题:https://github.com/jcryptool/core/issues/120 .

解决方法是将 JRE 8 build 171 build 切换到 JRE 8 build 144/121

关于java - "java.security.UnrecoverableKeyException: Rejected by the jceks.key.serialFilter or jdk.serialFilter property"的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990904/

相关文章:

java - Java (Solr) 线程转储有多昂贵?

lambda - 提取属性模式,使用 java lambda 合并并构建列表

Java 8 Lambda 重载

java - 丢失代码签名证书别名

java - 使用 spring boot 实现 2 路 SSL

java - 在优先级阻塞队列中设置顺序

java - Travis CI + Coverity 使用 Gradle 进行扫描

java-8 - 该方法 "setHeader"的圈复杂度为139,大于授权的10

ssl - KeyStore 和 KeyManager/TrustManager 的区别