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版本”:

  1. 以下列方式创建“ 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”。 该模块已完成。

  1. 由于我在EAR文件中部署,我必须在我的EAR的META-INF / jboss-deployment-structure.xml文件中添加模块依赖项,如下所示:

(该语句也适用于WAR文件,当部署在顶层时,使用自定义名称作为模块参考)

   
  1. 确保 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! (无论如何,这将是这样的依赖的正确范围。)

Interesting Posts