标签: jceks

"java.security.UnrecoverableKeyException:由jceks.key.serialFilter或jdk.serialFilter属性拒绝"的原因是什么?

当我在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 keystore java-8 jceks

6
推荐指数
1
解决办法
1721
查看次数

Wildfly 保险库 (JCEKS) 在保护 https 密钥库时有何意义?

我觉得我完全错过了 Wildfly 中新的 JCEKS 密钥库格式的要点。也许你可以让我直截了当。

我们配置 Wildfly 的方式(以及大部分互联网指示我们,例如):

  • 我们将标准密钥库条目放入标准 Java 密钥库(“keystore.jks”)文件中,并带有密码(“jks_pw”)
  • 然后,我们使用密码、salt 和轮次计数(“jceks_s_n”)创建一个 JCEKS 密钥库(“keystore.jceks”)。
  • 然后我们将“pks_pw”放入“keystore.jceks”
  • 然后我们将 JCEKS 密码/等(“jceks_s_n”)作为纯文本添加到我们的 jboss 配置(standalone.xml)中,定义一个条目
  • 然后,我们向 jboss https 连接器 (standalone.xml) 添加对保管库存储的 JKS 密码的引用,如“password="${VAULT::jks::jks::1}”。

这一切到底完成了什么???

如果我们只使用 JKS 文件和嵌入在 standalone.xml 中的密码,系统很容易受到:

  • 攻击者获得了 standalone.xml 和 JKS 文件的副本,在这种情况下,所有秘密都是已知的。
  • 攻击者获取 JKS 文件的副本,在这种情况下,攻击者可以使用暴力破解或查找表攻击。

如果我们以描述的方式使用 JCEKS 容器,系统很容易受到:

  • (相同)攻击者获得了 standalone.xml 的副本,即 JKS/JCEKS 文件,在这种情况下,所有秘密都是已知的。
  • (相同)攻击者获得 JKS 文件的副本,在这种情况下,攻击者可以使用暴力破解或查找表攻击。

如果我们将实际证书放在 JCEKS 文件中,这将有点有意义,在这种情况下,在第二种攻击情况下,蛮力和查找表攻击会更难,但到目前为止我还没有找到使用方法直接使用 https 连接器的 JCEKS 格式的密钥库。

真的,我太在意这个的唯一原因是我们显然有使用“保险库”的安全要求,但这似乎毫无意义。

更新:值得注意的是,通过使用保管库,您在 jboss 配置文件中使用了保管库的“隐藏”密码,但我无法弄清楚这意味着什么。显然,您的掩码密码 + salt + rounds 可以解锁 JCEKS 密钥库(source),所以我不确定掩码到底能完成什么。这似乎是第三级重定向。我必须错过一些东西......

https jboss wildfly jceks

5
推荐指数
1
解决办法
2998
查看次数

使用 Oracle Java 8 JRE 172 打开 JCEKS 密钥存储时出现“java.io.IOException: Invalid secret key format”

当我尝试在 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)
[...]
Run Code Online (Sandbox Code Playgroud)

这看起来非常像JDK-8202506,但我使用 Java 8 并且我收到null了初始 INFO 消息。

这是同样的问题吗?

在我看来,JDK-8202506问题目前尚未在任何公共 JRE 版本中修复。我对吗?

更新 1

这看起来很相似,他们也没有解决方案:ATLAS-2642

更新 2

出于某种原因,Equinoxcom.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 …
Run Code Online (Sandbox Code Playgroud)

java osgi jce equinox jceks

5
推荐指数
1
解决办法
7983
查看次数

如何在python中解密密码

我的代码使用 pyspark 连接到 sql server。对于该连接,我在 jceks 中获取加密密码。我如何解密该密码并用于从 sql server 加载表。请建议。

import pyspark
import re
from pyspark_llap import HiveWarehouseSession
from pyspark.sql.functions import struct
from pyspark.sql.functions import *
from pyspark.sql.session import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL data source example") \
    .getOrCreate()

hive = HiveWarehouseSession.session(spark).build()

df1 = spark.read.format("jdbc") \
    .option("url", "URL") \
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
    .option("dbtable", "tableName") \
    .option("user", "user") \
    .option("password", "password_alias").load()
Run Code Online (Sandbox Code Playgroud)

python password-protection password-encryption python-3.x jceks

5
推荐指数
1
解决办法
2076
查看次数