2015-04-17 77 views
10

背景BouncyCastle的1.51装载在战争Wildfly 8.0

我想使用充气城堡库在我的战争解密私钥。现在我先在独立应用程序中测试代码,并且它工作正常。现在,当我在Wildfly8.0上测试它作为webapp时,面临着Bouncy城​​堡的一些问题。

Wildfly 8.0正在使用安装了充气城堡供应商模块。 BC版本在v1.46中使用。

我开发的代码使用v1.51。 我按照此处提到的步骤:

已经尝试过

  • 安装JCE po licy文件。
  • 添加到提供者列表中。

问题

我得到的错误是:

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,所以这些库被复制到war和ge中安装在WEB-INF/lib中。

任何提示解决上述问题?

+0

您引用的'JBoss AS7:...'问题说:“创建一个Jboss模块(文件夹[...])。把[...]“,但在上面说BC jar被安装在WEB-INF/lib中。有没有可能你误解了那里的指示? –

+0

现有的JBoss模块使用BC v1.46。我想用我的webapp使用BC v1.51。我无法升级JBoss模块以使用BC v1.51,因为还有其他webapps依赖于v1.46。希望这个清楚。 – eminemence

+1

难道你不能为1.51创建第二个模块吗? –

回答

3

一结合彼得(@comment)和https://developer.jboss.org/thread/175395的理念,打造“自己的BC版”使用自定义名称:

  1. 在下面创建一个“ .bouncycastle”模块方式:

    • 在$ JBOSS_HOME /模块,创建目录 '/BouncyCastle的/主'。目录'我的'可能不是在那里。 ;)

    • 复制bcprov- [您的版本]的.jar到/BouncyCastle的/主

    • 创建文件“bcprov- [您的版本]的.jar。索引'我的/bouncycastle/main,这基本上是一个没有“.class”行的jar -tf命令的输出。 (管道&编辑...)

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

    • 创建一个名为“module.xml”文件,也是我/BouncyCastle的/主,这将指向jar文件和参考模块“javax.api”作为一个依赖。

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

  • 因为我在EAR文件部署,我只好一个模块依赖项添加到我的EAR的META-INF/jboss的部署-structure.xml文件,下部分,像这样:
  • (声明也适用于WAR文件,在顶级部署时,使用定制ñ AME作为模块参考)

    <deployment><dependencies><module name="my.bouncycastle" slot="main" export="true"/> 
    
  • 使某些该耳的/ lib目录不含有bcprov- [您版本]的.jar。 (实际上II)
  • 注: 的 '插槽= “主” 和' 出口= “真” 参数在jboss-依赖-structure.xml文件非常重要 ..

    二,调整你的Maven的依赖(IES)到:

    <scope>provided</scope> 
    

    注:不要改变行家dependecy(IES组文物),以 “my.bouncycastle”,只是范围,这将确保你一个很好的编译大多数IDE的AND时间行为会阻止你的(maven-)war/jar/ear-plugin将它打包成libs! (无论如何,这将是正确的范围依赖这样的。)