BouncyCastle 1.51 loading in war on Wildfly 8.0

Фон

Я пытаюсь использовать bouncy библиотеку замка, чтобы расшифровать личные ключи в моей войне. Теперь я тестировал код сначала в автономном приложении, и он работал нормально. Теперь, когда я тестирую его как webapp в Wildfly8.0, сталкиваюсь с некоторыми проблемами с замком Bouncy.

У Wildfly 8.0 утра используется установленный модуль провайдера замка. Версия BC используется в версии 1.46.

В коде, который я разработал, используется v1.51. Я выполнил следующие шаги:

Уже пробовал

  • Установка файлов политики 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 я добавил банку с областью компиляции, поэтому библиотеки были скопированы в войну и установлены в WEB-INF/lib.

Какие-нибудь советы по устранению вышеуказанной проблемы?

Ответ 1

я. Объединив идею Peter (@comment) и https://developer.jboss.org/thread/175395, создайте "свою собственную версию bc" с пользовательским именем:

  • Создайте модуль my.bouncycastle 'следующим образом:

    • В $JBOSS_HOME/modules создайте каталог my/bouncycastle/main. Каталог мой может содержать не.;)

    • Скопируйте bcprov- [свою версию].jar в мой/bouncycastle/main

    • Создайте файл "bcprov- [ваша версия].jar.index 'в my/bouncycastle/main, что в основном является результатом jar -tf без строк".class". (Труба & редактирование...)

      Я помещаю пустую строку наверху, потому что эти .index файлы всегда, похоже, есть. Я прикреплял этот файл как "bcprov-jdk16-1.46.jar.index".

    • Создайте файл с именем "module.xml", также в my/bouncycastle/main, который укажет на файл jar и ссылочный модуль javax.api в качестве зависимости.

      Я прикрепил этот файл как 'module.xml'. Модуль завершен.

  1. Поскольку я развертываю в EAR файле, мне пришлось добавить запись зависимостей модуля в мой файл EAR META-INF/jboss-deployment-structure.xml в разделе, например:

(утверждение также относится к файлам WAR, при развертывании на верхнем уровне используется настраиваемое имя как ссылка на модуль)

    <deployment><dependencies><module name="my.bouncycastle" slot="main" export="true"/>  
  1. Определите, что каталог ear/lib не содержит bcprov- [ваша версия].jar. (на самом деле II.)

Примечания: Параметры 'slot = "main" и' export = "true" очень важны в файле jboss-dependency-structure.xml...

II. Отрегулируйте зависимость (-ы) от maven до:

<scope>provided</scope>

Примечание. Не изменяйте артефакты maven dependecy (ies group) на "my.bouncycastle", только область, это обеспечит вам приятное поведение во время компиляции самой IDE И будет препятствовать тому, чтобы ваш (maven-) war/jar/ear-plugin упаковывал его в libs! (И это будет в любом случае правильной сферой для такой зависимости).