BouncyCastle 1.51在Wildfly 8.0上加载战争

emi*_*nce 10 java jboss bouncycastle war wildfly-8

背景

我正在尝试使用充气城堡库在我的战争中解密私钥.现在我在一个独立的应用程序中首先测试了代码,它运行良好.现在,当我在Wildfly8.0中测试它作为webapp时,我正面临着与Bouncy城​​堡的一些问题.

Wildfly 8.0 am使用安装了充气城堡提供者模块.在v1.46中使用的BC版本.

我开发的代码使用v1.51.我按照这里提到的步骤:

已经尝试过了

  • 安装JCE策略文件.
  • 添加到提供者列表.

问题

我得到的错误是:

unable to read encrypted data: JCE cannot authenticate the provider BC 
Run Code Online (Sandbox Code Playgroud)

以及触发上述错误的代码如下:

PKCS8EncryptedPrivateKeyInfo kp = (PKCS8EncryptedPrivateKeyInfo) keyPair;  
InputDecryptorProvider pkcs8dec = new JceOpenSSLPKCS8DecryptorProviderBuilder()  
      .setProvider(new BouncyCastleProvider())  
      .build("somepass".toCharArray());  
PrivateKeyInfo pko = kp.decryptPrivateKeyInfo(pkcs8dec);<-- ##Error here  
Run Code Online (Sandbox Code Playgroud)

另外要添加详细信息,在我的pom.xml中我添加了带有编译范围的jar,因此libs被复制到war中并安装在WEB-INF/lib中.

解决上述问题的任何提示?

xer*_*593 3

I. 结合 Peter (@comment) 和https://developer.jboss.org/thread/175395的想法,使用自定义名称创建“您自己的 bc 版本”:

  1. 按以下方式创建“ my .bouncycastle”模块:

    • 在 $JBOSS_HOME/modules 下,创建目录“ my /bouncycastle/main”。目录“我的”可能存在。;)

    • 将 bcprov- [your-version] .jar 复制到我的/bouncycastle/main中

    • 在我的/bouncycastle/main 中创建文件“bcprov- [your-version] .jar.index” ,这基本上是不带“.class”行的命令的输出。(管道并编辑...)jar -tf

      我在顶部添加了一个空行,因为这些 .index 文件似乎总是有一个空行。我已将此文件附加为“bcprov-jdk16-1.46.jar.index”。

    • 创建一个名为“module.xml”的文件,也在我的/bouncycastle/main 中,它将指向 jar 文件并引用模块“javax.api”作为依赖项。

      我已将此文件附加为“module.xml”。该模块已完成。

  1. 由于我在 EAR 文件中进行部署,因此我必须将模块依赖项添加到 EAR 的 META-INF/jboss-deployment-struction.xml 文件的该部分下,如下所示:

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

    <deployment><dependencies><module name="my.bouncycastle" slot="main" export="true"/>  
Run Code Online (Sandbox Code Playgroud)
  1. 确保Ear 的 /lib 目录不包含 bcprov-[your-version] .jar。(实际上是II。)

注意: 'slot="main" 和 'export="true" 参数在 jboss-dependency-struct.xml 文件中非常重要......

二. 将您的 Maven 依赖项调整为:

<scope>provided</scope>
Run Code Online (Sandbox Code Playgroud)

注意:不要将 Maven 依赖项(即组工件)更改为“my.bouncycastle”,仅更改范围,这将确保您在大多数 IDE 中获得良好的编译时行为,并且将防止您的 (maven-)war/ jar/ear-plugin 将其打包到库中!(无论如何,这都是像这样的依赖项的正确范围。)