Формат данных PGP Crypto приводит к исключению: java.lang.NoSuchMethodError: org.bouncycastle.openpgp.PGPSecretKey.extractPrivateKey

Я экспериментирую с компонентом pgp, используя Camel 2.12.1. В конечном итоге я хочу SFTP зашифровать файл pgp и позволить Camel расшифровать файл перед обработкой.

Мой маршрут:

from("direct:decrypt").unmarshal().pgp("file:///home/cps/.gnupg/secring.gpg", "developer", "xxx")
        .to("log:decrypt");

Мой маршрут приводит к следующему исключению:

java.lang.NoSuchMethodError: org.bouncycastle.openpgp.PGPSecretKey.extractPrivateKey(Lorg/bouncycastle/openpgp/operator/PBESecretKeyDecryptor;)Lorg/bouncycastle/openpgp/PGPPrivateKey;
    at org.apache.camel.converter.crypto.PGPDataFormatUtil.findPrivateKey(PGPDataFormatUtil.java:164)
    at org.apache.camel.converter.crypto.PGPDataFormatUtil.findPrivateKey(PGPDataFormatUtil.java:139)

Мой файл pom.xml добавляет следующую зависимость:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-crypto</artifactId>
</dependency>

Есть ли какая-то другая библиотека, которую нужно включить?

Обновление Комментарий Скайра ниже напомнил мне, что у нас была установлена ​​другая версия банок bouncycastle в нашем каталоге jre/lib/ext. Когда я удаляю эти файлы, вместо этого я получаю другое исключение.

java.lang.SecurityException: class "org.bouncycastle.asn1.DEREncodable"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:807)
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:626)

Я добавил старый файл bcpg-jdk16.jar обратно в jre/lib/ext, и все заработало!? На данный момент я озадачен тем, почему это сработало, но я ценю прогресс и предложенную помощь.


person David    schedule 18.12.2013    source источник
comment
Просто дикая догадка: вы также добавили bouncycastle в качестве зависимости в свой файл pom? Или в bouncycastle тянет какая-то другая зависимость? Возможно, у вас есть две версии BC в пути к классам, одна из которых не предоставляет метод, упомянутый в исключении.   -  person Skyr    schedule 19.12.2013
comment
Можете ли вы использовать mvn depdency:tree, чтобы проверить, является ли версия bcgp-jdk15on 1.49?   -  person Willem Jiang    schedule 19.12.2013
comment
Вы уверены, что ваш сертификат находится по адресу file:///home/cps/.gnupg/secring.gpg? Разве это не тот файл, который вы хотите расшифровать? Содержит ли ваш закрытый ключ идентификатор пользователя developer, чаще всего это User <[email protected]>, а пароль необязателен.   -  person Milan Baran    schedule 19.12.2013
comment
Спасибо за помощь всем. У меня есть новые проблемы, но я добился прогресса. Мышление Скайра и его комментарий вызвали воспоминание. У нас есть библиотеки bouncycastle, установленные в нашем каталоге jre/lib/ext, которые создавали конфликты. Теперь у меня разные проблемы, но основной причиной проблемы, описанной в моем первоначальном вопросе, были в основном дублирующиеся банки.   -  person David    schedule 19.12.2013


Ответы (1)


Это означает, что версия вашего bouncyCastle несовместима с версией вашего JDK. Пытаться:

<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcpg-jdk15on</artifactId>
  <version>1.50</version>
</dependency>

См.: https://www.bouncycastle.org/latest_releases.html.


Существует также версия serviceMix:

<dependency>
  <groupId>org.apache.servicemix.bundles</groupId>
  <artifactId>
    org.apache.servicemix.bundles.bcpg-jdk15on
  </artifactId>
  <version>1.50_1</version>
</dependency>
person 4F2E4A2E    schedule 20.06.2014