2015-04-17 45 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! (無論如何,這將是正確的範圍依賴這樣的。)