gpt4 book ai didi

java - JCEKS keystore 不再加载 : com. sun.crypto.provider.SealedObjectForKeyProtector

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:36 29 4
gpt4 key购买 nike

我有一个 JCEKS keystore 来保存我的 AES key 。这已经在开发环境和 GAE 运行时中工作了一段时间。

昨晚我部署了一个更新(与加密案例无关),现在加载 keystore 抛出 IOException:com.sun.crypto.provider.SealedObjectForKeyProtector 随后我的加密都不起作用(正如您所期望的,因为我无法拿到 key )。

我用 Google 搜索了异常(exception)情况 - 一条线索看起来很有希望: Convert a key of JCEKS of a provider into another store for another provider...这表明不能用另一个提供者读取由一个提供者创建的 keystore ,但这里似乎不是这种情况,因为它昨天还在工作!还有 https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6.2/html/Administration_and_Configuration_Guide/sect-Password_Vaults_for_Sensitive_Strings.html建议不兼容的提供者。

我将我的应用程序回滚到以前的(工作)版本,但我遇到了同样的错误。

GAE 是否已更改其默认提供程序?我应该在我的代码中明确声明所需的提供程序吗?

谢谢史蒂夫

2015 年 5 月更新 - 已确定根本原因

问题是下面的 ks.load() 抛出的 IOException:

final KeyStore ks = KeyStore.getInstance(KEYSTORE_TYPE_JCEKS);
try {
InputStream is = this.getClass().getClassLoader().getResourceAsStream("squirrol.keystore");
ks.load(is, getKeystorePassword().toCharArray()); // IOException thrown here
...
} catch (NoSuchAlgorithmException | CertificateException | IOException e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
throw new KeyStoreException("Failed to load KeyStore: " + e.getLocalizedMessage());
}

堆栈跟踪输出开始于:

at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:844)

谷歌搜索类名找到了来源(可能不是实际来源,但堆栈跟踪中的行号对齐)。第 844 行表明此 IOException 是由于 ClassNotFoundException 引发的,消息是未找到的类的名称 - 在本例中为 com.sun.crypto.provider.SealedObjectForKeyProtector:

http://www.docjar.com/html/api/com/sun/crypto/provider/JceKeyStore.java.html

因此,根本原因是 Google App Engine 运行时 v1.9.21 无法加载 keystore ,因为它无法加载 com.sun.crypto.provider.SealedObjectForKeyProtector 类,Google 承认这是一个白名单问题。

临时解决作为支持票的结果,谷歌已将我的运行时恢复到 1.9.20,它没有这个问题。我正在等待一个修复程序,它可以让我重新使用自动引擎更新。

更新 04/06/15 - 已解决Google 将在 v1.9.22 运行时中进行修复。

更新 11/06/15 - 毕竟没有解决该问题在 v1.9.22 运行时仍然存在:(

2015 年 6 月 30 日更新 - 真正解决并证明Google 在 v1.9.23 运行时修复了它。答案已更新以反射(reflect)。

最佳答案

这已在 GAE 运行时 1.9.23 中得到确认(不是 1.9.22 - 它错过了剪辑)。

问题在于运行时白名单,它省略了加载 JCEKS keystore 所需的一个或多个类。

此问题仅影响 GAE 运行时 1.9.21 和 1.9.22。请注意,这是服务器引擎版本,而不是 SDK 版本。可以在控制台查看服务器版本。

关于java - JCEKS keystore 不再加载 : com. sun.crypto.provider.SealedObjectForKeyProtector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30259466/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com