【发布时间】:2015-06-24 08:51:17
【问题描述】:
背景
我正在尝试使用充气城堡库来解密我的战争中的私钥。现在我首先在一个独立的应用程序中测试了代码,它运行良好。现在,当我在 Wildfly8.0 中将其作为 web 应用程序进行测试时,我遇到了 Bouncy castle 的一些问题。
使用的 Wildfly 8.0 安装了充气城堡提供程序模块。 v1.46使用的BC版本。
我开发的代码使用v1.51。 我已按照此处提到的步骤操作:
- https://developer.jboss.org/thread/175395
- bouncycastle + JBoss AS7: JCE cannot authenticate the provider BC - 具体遵循针对特定部署(首选)中提供的说明
已经尝试过
- 安装 JCE 策略文件。
- 添加到提供者列表。
问题
我得到的错误是:
unable to read encrypted data: JCE cannot authenticate the provider BC
以及触发上述错误的代码,如下:
PKCS8EncryptedPrivateKeyInfo kp = (PKCS8EncryptedPrivateKeyInfo) keyPair;
InputDecryptorProvider pkcs8dec = new JceOpenSSLPKCS8DecryptorProviderBuilder()
.setProvider(new BouncyCastleProvider())
.build("somepass".toCharArray());
PrivateKeyInfo pko = kp.decryptPrivateKeyInfo(pkcs8dec);<-- ##Error here
还要添加详细信息,在我的 pom.xml 中,我添加了带有编译范围的 jar,因此这些库被复制到战争中并安装在 WEB-INF/lib 中。
有解决上述问题的技巧吗?
【问题讨论】:
-
您提到的“JBoss AS7:...”问题是“创建一个 Jboss 模块(一个文件夹 [...])。将您想要在全球范围内可用的充气城堡罐子放在它,连同一个 module.xml 文件 [...]",但在上面你说 BC jar 安装在 WEB-INF/lib 中。您是否可能误解了那里的说明?
-
现有的 JBoss 模块使用 BC v1.46。我想在我的 webapp 中使用 BC v1.51。我无法升级 JBoss 模块以使用 BC v1.51,因为还有其他 webapps 依赖于 v1.46。希望这能说明问题。
-
你不能为 1.51 创建第二个模块吗?
-
我只是想让它尽可能地隔离,让它保持在战争级别似乎是最好的解决方案。
-
JCE api 具有对注册提供者地图的静态引用。 JCE 类来自父类加载器。如果来自不同类加载器的 2 个实现尝试将它们自己注册为相同的名称,则相互覆盖。因此,其中一个用户代码将收到错误的代码(可能来自它无权访问的类加载器)
标签: java jboss war bouncycastle wildfly-8