BouncyCastle 1.51在Wildfly 8.0上加载战争
背景
我正在尝试使用充气城堡库在我的战争中解密私钥。 现在我首先在一个独立的应用程序中测试了代码,它运行良好。 现在,当我在Wildfly8.0中测试它作为webapp时,面临着与Bouncy城堡的一些问题。
Wildfly 8.0 am使用了安装了充气城堡提供者模块。 在v1.46中使用的BC版本。
我开发的代码使用v1.51。 我按照这里提到的步骤:
- https://developer.jboss.org/thread/175395
- bouncycastle + JBoss AS7:JCE无法对提供商BC进行身份validation – 具体遵循在特定部署中提供的说明(首选)
已经尝试过了
- 安装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,因此将libs复制到war中并安装在WEB-INF / lib中。
有任何提示来解决上述问题吗?
I.结合Peter(@comment)和https://developer.jboss.org/thread/175395的想法,使用自定义名称创建“您自己的bc版本”:
-
以下列方式创建“ my .bouncycastle”模块:
-
在$ JBOSS_HOME / modules下,创建目录’ my / bouncycastle / main’。 目录’ 我 ‘可能不在那里。 ;)
-
将bcprov- [your-version] .jar复制到my / bouncycastle / main中
-
在my / bouncycastle / main中创建文件’bcprov- [your-version] .jar.index’,它基本上是没有“.class”行的
jar -tf
命令的输出。 (管和编辑…)我在顶部放了一个空白行,因为这些.index文件似乎总是有一行。 我已将此文件附加为“bcprov-jdk16-1.46.jar.index”。
-
在my / bouncycastle / main中创建一个名为“module.xml”的文件,它将指向jar文件和引用模块“javax.api”作为依赖项。
我已将此文件附加为“module.xml”。 该模块已完成。
-
- 由于我在EAR文件中部署,我必须在我的EAR的META-INF / jboss-deployment-structure.xml文件中添加模块依赖项,如下所示:
(该语句也适用于WAR文件,当部署在顶层时,使用自定义名称作为模块参考)
- 确保 ear的/ lib目录不包含bcprov- [your-version] .jar。 (实际上是II。)
注意:’slot =“main”和’export =“true”参数在jboss-dependency-structure.xml文件中非常重要 …
II。 调整您的maven依赖关系:
provided
注意:不要将maven dependecy(ies组工件)更改为“my.bouncycastle”,只更改范围,这将确保大多数IDE的编译时行为很好并且会阻止你的(maven-)战争/ jar / ear-plugin从包装到libs! (无论如何,这将是这样的依赖的正确范围。)